Ejemplo n.º 1
0
        /// <summary>
        /// Process Payment Request by sending request to acquiring Bank
        /// </summary>
        /// <param name="request">Payment request to send</param>
        /// <returns>Processed response from bank</returns>
        public async Task <PaymentResponse> ProcessAsync(PaymentRequest request)
        {
            if (await _paymentValidator.ValidateAsync(request))
            {
                PaymentResponse response = await _billingAdapter.SendRequestAsync(request);

                if (response != null)
                {
                    await _repository.SavePaymentRecordAsync(new PaymentRecord()
                    {
                        ExternalID          = request.ExternalID,
                        BillingID           = response.BillingTransactionID,
                        Amount              = request.Amount,
                        CardExpirationMonth = request.ExpiryMonth,
                        CardExpirationYear  = request.ExpiryYear,
                        CardNumber          = _encryptor.Encrypt(request.CardNumber),
                        CurrencyCode        = request.CurrencyCode,
                        CVV            = request.Cvv,
                        BillingSuccess = response.Success
                    });
                }

                return(await Task.FromResult(response));
            }
            else
            {
                throw new ApiException("Validation failed", "500");
            }
        }
Ejemplo n.º 2
0
        public async Task <ActionResult> Post([FromBody] Payment payment)
        {
            if (payment == null)
            {
                return(BadRequest());
            }

            var validationResult = await _paymentValidator.ValidateAsync(payment);

            if (!validationResult.IsValid)
            {
                return(Ok(new PaymentGatewayResult {
                    Success = false, Errors = validationResult.Errors.Select(x => x.ErrorMessage).ToList()
                }));
            }

            var paymentResult = await _paymentGatewayService.Save(payment);

            if (paymentResult.PaymentStatus != PaymentStatus.Successful)
            {
                //Perhaps you could output the reason here for the user but for now a generic message
                return(Ok(new PaymentGatewayResult {
                    Success = false, Errors = new List <string>()
                    {
                        Resources.PaymentUnsuccessful
                    }
                }));
            }

            return(Ok(new { Success = true }));
        }