コード例 #1
0
        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));
        }
コード例 #2
0
        /// <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));
            }
        }