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 }); } }