public async Task <SmartJsonResult <PaymentCardResponse> > ProcessCardPayment([FromBody] PaymentRequestApiModel model)
        {
            if (ModelState.IsValid)
            {
                model.CustomerIP = HttpContext.Connection.RemoteIpAddress?.ToString() ?? "127.0.0.1";

                var request = _mapper.Map <PaymentCardRequest>(model);
                request.notifyUrl = Url.Action("Notify", "Payment", new { area = "Portal" }, "http");
                var payuServiceResult = await _payuService.ProcessCardPaymentAsync(request, model.UserId, OrderPlace.Panel);

                if (payuServiceResult.IsValid)
                {
                    return
                        (SmartJsonResult <PaymentCardResponse> .Success(payuServiceResult.Result));
                }
                return(SmartJsonResult <PaymentCardResponse> .Failure(payuServiceResult.ValidationErrors));
            }
            return(SmartJsonResult <PaymentCardResponse> .Failure(GetModelStateErrors(ModelState)));
        }
        public async Task <PaymentResultApiModel> ProcessPaymentAsync([FromBody] PaymentRequestApiModel paymentRequest)
        {
            // Get the user
            var user = await mUserManager
                       .GetUserAsync(HttpContext.User);

            // Initialize a paystack transaction

            var payStack = new PayStackApi(Configuration["PayStack:SecretKey"]);

            // Set the request parameters
            var request = new TransactionInitializeRequest
            {
                Reference    = paymentRequest.Reference,
                AmountInKobo = paymentRequest.Amount * 100,
                Email        = user.Email,
                CallbackUrl  = Configuration["AbsoluteUrl"] + ApiRoutes.VerifyPayment,
                Currency     = "NGN"
            };

            try
            {
                // Initialize the payment transaction
                var trxResult = payStack
                                .Transactions
                                .Initialize(request);

                // If the transaction was successful...
                if (trxResult.Status)
                {
                    // Get the authorization url
                    var authorizationUrl = trxResult
                                           .Data
                                           .AuthorizationUrl;

                    // Register a payment transaction
                    await mContext
                    .PaymentTransactions
                    .AddAsync(new PaymentTransactionsDataModel
                    {
                        Id              = Guid.NewGuid().ToString(),
                        Reference       = paymentRequest.Reference,
                        UserId          = user.Id,
                        PaymentVerified = false,
                        EditionId       = paymentRequest.EditionId
                    });

                    // Commit changes to the database
                    await mContext.SaveChangesAsync();

                    // Redirect to the authorised url
                    return(new PaymentResultApiModel
                    {
                        AuthorisationUrl = authorizationUrl
                    });
                }
                // Otherwise, if it was unsuccessful...
                else
                {
                    // Return error message
                    return(new PaymentResultApiModel
                    {
                        ErrorMessage = trxResult.Message
                    });
                }
            }
            catch (Exception ex)
            {
                return(new PaymentResultApiModel
                {
                    ErrorMessage = ex.Message
                });
            }
        }