public IActionResult Post([FromBody] PaymentRequest paymentDetails, [FromServices] IBankRequest bank_request, [FromServices] IApiClient client, [FromServices] IPaymentResponse res, [FromServices] IHttpContextAccessor context) { this.logger.LogDebug("POST request : {PaymentRequest}", paymentDetails); /* * Step 1 - Make a POST request to the acquring Bank to valid the payment */ string bank_response_json = null; bank_request.request = paymentDetails; try { bank_response_json = client.Post("https://httpbin.org/post", JsonConvert.SerializeObject(bank_request), "application/json"); } catch (Exception ex) { this.logger.LogError("Could not send the post.Details : {Exception}", ex); } /* * Step 2 - Deserialize the response from bank */ var bank_response = JsonConvert.DeserializeObject <BankResponse>(bank_response_json); var bank_response_data = JsonConvert.DeserializeObject <BankResponseData>(bank_response.Data); this.logger.LogDebug("bank_response : {BankResponse}", bank_response); this.logger.LogDebug("bank_response_data : {BankResponseData}", bank_response_data); /* * Step 3 - Create the response */ res.Id = Guid.NewGuid().ToString(); res.cardNo = bank_response_data.Request.CardNo; res.expiry = bank_response_data.Request.Expiry; res.amount = bank_response_data.Request.Amount; res.currency = bank_response_data.Request.Currency; res.cvv = bank_response_data.Request.Cvv; res.response_code = 201; /* * Add to payments collections */ _payments.Add(res); /* * Send created response */ string baseurl = $"{context.HttpContext.Request.Scheme}://{context.HttpContext.Request.Host.ToUriComponent()}"; string locationUri = baseurl + '/' + "api/v1/Payment" + '/' + res.Id; return(Created(locationUri, res)); }
/// <summary> /// This endpoint will process the payment. /// </summary> /// <param name="payload">The payload.</param> /// <returns> /// The <see cref="Task{IActionResult}" />. /// </returns> public static IActionResult ProcessPayment(ProcessPaymentPayload payload, IBankRequest bankRequest) { try { // process payment with bank var merchantId = payload.MerchantIdentifier; var isPayout = payload.IsPayout; var merchant = ConnectionHelper.GetMerchantById(merchantId); var bankRequestPayload = new BankRequestPayload().Map(payload, merchant, isPayout); var bankResponse = bankRequest.ProcessPayment(bankRequestPayload); // save in database PaymentDetails paymentDetails = new PaymentDetails().Map(payload, bankResponse.PaymentId, bankResponse.Success); ConnectionHelper.SavePayment(paymentDetails); // return response return(new OkObjectResult(new ProcessPaymentResponse().Map(paymentDetails))); } catch (Exception ex) { return(new BadRequestObjectResult(ex.Message)); } }