コード例 #1
0
        public async Task <IHttpActionResult> PayfortCapture(CaptureResponseModel model)
        {
            try
            {
                using (StreamWriter sw = File.AppendText(AppDomain.CurrentDomain.BaseDirectory + "/PaymentErrorLog.txt"))
                {
                    sw.WriteLine("DateTime : " + DateTime.Now + Environment.NewLine);
                    sw.WriteLine(Environment.NewLine + "Payfort Capture called by payfort");
                    sw.WriteLine(Environment.NewLine + "command: " + model.command);
                    sw.WriteLine(Environment.NewLine + "access_code: " + model.access_code);
                    sw.WriteLine(Environment.NewLine + "amount: " + model.amount);
                    sw.WriteLine(Environment.NewLine + "currency: " + model.currency);
                    sw.WriteLine(Environment.NewLine + "fort_id: " + model.fort_id);
                    sw.WriteLine(Environment.NewLine + "language: " + model.language);
                    sw.WriteLine(Environment.NewLine + "merchant_identifier: " + model.merchant_identifier);
                    sw.WriteLine(Environment.NewLine + "merchant_reference: " + model.merchant_reference);
                    sw.WriteLine(Environment.NewLine + "order_description: " + model.order_description);
                    sw.WriteLine(Environment.NewLine + "response_code: " + model.response_code);
                    sw.WriteLine(Environment.NewLine + "response_message: " + model.response_message);
                    sw.WriteLine(Environment.NewLine + "signature: " + model.signature);
                    sw.WriteLine(Environment.NewLine + "status: " + model.status);
                    sw.WriteLine(Environment.NewLine + "*****End Of Transaction*****");
                }

                using (RiscoContext ctx = new RiscoContext())
                {
                    var order = ctx.Orders.FirstOrDefault(x => x.PaymentTransactionId == x.PaymentTransactionId);
                    if (order != null)
                    {
                        if (model.status == 04)
                        {
                            order.PaymentStatus = (int)PaymentStatuses.Completed;
                        }
                        else
                        {
                            order.PaymentStatus = (int)PaymentStatuses.Pending;
                        }

                        order.PaymentTransactionId = model.fort_id;

                        ctx.SaveChanges();
                    }
                    return(Ok());
                }
            }
            catch (Exception ex)
            {
                return(StatusCode(Utility.LogError(ex)));
            }
        }
コード例 #2
0
        public async Task <CaptureResponseModel> Capture(CaptureRequestModel request)
        {
            var securityUrl     = request.Settings["SecurityUrl"];
            var userName        = request.Settings["UserName"];
            var password        = request.Settings["Password"];
            var confirmationUrl = request.Settings["ConfirmationUrl"];
            var merchantId      = request.Settings["MerchantId"];

            var token = await this._visaNetSecurityTokenService.GetToken(securityUrl, userName, password);

            var requestMessage = new
            {
                channel     = "web",
                captureType = "manual",
                order       = new
                {
                    purchaseNumber   = request.OrderNumber,
                    amount           = request.Amount,
                    authorizedAmount = request.AuthorizedAmount,
                    currency         = request.CurrencyIsoCode,
                    transactionId    = request.TransactionId
                }
            };

            var headers = new Dictionary <string, string>();

            headers.Add("authorization", token);

            using (var proxy = new HttpClient())
            {
                var httpRequest = new HttpRequestMessage(HttpMethod.Post, $"{confirmationUrl}/confirmation/ecommerce/{merchantId}");

                foreach (var h in headers)
                {
                    httpRequest.Headers.TryAddWithoutValidation(h.Key, h.Value);
                }

                var json = Newtonsoft.Json.JsonConvert.SerializeObject(requestMessage);

                httpRequest.Content = new StringContent(json, Encoding.UTF8, "application/json");

                var response = await proxy.SendAsync(httpRequest);

                if (response.IsSuccessStatusCode)
                {
                    var data = Newtonsoft.Json.JsonConvert.DeserializeObject <AuthorizeResultModel>(await response.Content.ReadAsStringAsync());

                    var result = new CaptureResponseModel
                    {
                        Success = true
                    };

                    return(result);
                }

                var errorData = Newtonsoft.Json.JsonConvert.DeserializeObject <CaptureFailedResultModel>(await response.Content.ReadAsStringAsync());

                return(new CaptureResponseModel
                {
                    Success = false,
                    Errors = new List <TransactionErrorResponseModel> {
                        new TransactionErrorResponseModel {
                            Code = errorData.ErrorCode, Message = $"Code: ({errorData.Data.ACTION_CODE}) {errorData.Data.ACTION_DESCRIPTION}. {errorData.ErrorMessage}"
                        }
                    }
                });
            }
        }