public AcquirerResponseDTO ForwardPaymentRequestToAcquirer(AcquirerRequestDTO acquirerRequestDTO) { //Waiting for 1 second to mimic the wait which acquiring bank woul d actually take Thread.Sleep(1000); AcquirerResponseDTO acquirerResponseDTO = new AcquirerResponseDTO(); acquirerResponseDTO.Transaction_Reference_id = acquirerRequestDTO.Transaction_Reference_id; acquirerResponseDTO.Payment_Reference_Id = Guid.NewGuid(); acquirerResponseDTO.Status = StatusCode.APPROVED; acquirerResponseDTO.Processed_On = DateTime.UtcNow; return(acquirerResponseDTO); }
public AcquirerResponseDTO ForwardPaymentRequestToAcquirer(AcquirerRequestDTO acquirerRequestDTO) { //here should be the actual code to call acquirer return(null); }
public async Task <PaymentResponseDTO> ProcessPaymentAsync(Guid transaction_reference, PaymentRequestDTO paymentRequest) { PaymentResponseDTO paymentResponseDTO = _mapper.Map <PaymentResponseDTO>(paymentRequest); paymentResponseDTO.Transaction_Reference_Id = transaction_reference; try { #region Save/Retrieve Card Card card_to_use; //An Existing/Previously used card was provided so, retrieve from db if (paymentRequest.Card_Info.Id.HasValue && paymentRequest.Card_Info.Id != Guid.Empty) { card_to_use = await _cardService.RetrieveCardByIdAndCvvAsync(paymentRequest.Card_Info.Id.Value, paymentRequest.Card_Info.Cvv); if (card_to_use == null) { paymentResponseDTO.Status = StatusCode.INVALID_DATA; paymentResponseDTO.Errors = new List <string>() { "Could not retrieve card, Invalid card id or cvv was provided" }; return(paymentResponseDTO); } } //A new card was provided so save to database (Not validating if the card exisits as it could be that another merchant saved the same user's card) else { card_to_use = await _cardService.SaveCardAsync(paymentRequest.Card_Info); } CardResponseDTO cardResponseDTO = new CardResponseDTO(card_to_use.Number); cardResponseDTO.Id = card_to_use.Id; cardResponseDTO.Expiry_Month = card_to_use.Expiry_Month; cardResponseDTO.Expiry_Year = card_to_use.Expiry_Year; paymentResponseDTO.Card_Info = cardResponseDTO; #endregion #region Acquirer request and response //Call the Acquiring Bank Service, set the acquirer_reference_id AcquirerRequestDTO acquirerRequestDTO = new AcquirerRequestDTO(); acquirerRequestDTO.Transaction_Reference_id = transaction_reference; acquirerRequestDTO.Amount = paymentRequest.Amount; acquirerRequestDTO.Currency = paymentRequest.Currency; acquirerRequestDTO.card = card_to_use; acquirerRequestDTO.Payment_Description = paymentRequest.Payment_Description; AcquirerResponseDTO acquirerResponseDTO = _acquirerService.ForwardPaymentRequestToAcquirer(acquirerRequestDTO); paymentResponseDTO.Acquirer_Reference_Id = acquirerResponseDTO.Payment_Reference_Id; paymentResponseDTO.Status = acquirerResponseDTO.Status; paymentResponseDTO.Processed_On = acquirerResponseDTO.Processed_On; #endregion //Save Payment Response await SavePaymentResponseAsync(paymentResponseDTO, card_to_use); return(paymentResponseDTO); } catch (Exception ex) { //Log the exception paymentResponseDTO.Errors = new List <string>() { StringConstants.UNEXPECTED_ERROR_MESSAGE }; paymentResponseDTO.Status = Domain.DTOs.StatusCode.UNKNOWN; } return(paymentResponseDTO); }