Exemple #1
0
        public static PaymentRequestResult CreateRequestResult(
            string webServiceResponse,
            Invoice invoice,
            IranKishGatewayAccount account,
            HttpContext httpContext,
            MessagesOptions messagesOptions)
        {
            var result  = XmlHelper.GetNodeValueFromXml(webServiceResponse, "result", "http://schemas.datacontract.org/2004/07/Token");
            var message = XmlHelper.GetNodeValueFromXml(webServiceResponse, "message", "http://schemas.datacontract.org/2004/07/Token");
            var token   = XmlHelper.GetNodeValueFromXml(webServiceResponse, "token", "http://schemas.datacontract.org/2004/07/Token");

            var isSucceed = result.Equals("true", StringComparison.OrdinalIgnoreCase) && !token.IsNullOrEmpty();

            if (!isSucceed)
            {
                if (message.IsNullOrEmpty())
                {
                    message = messagesOptions.InvalidDataReceivedFromGateway;
                }

                return(PaymentRequestResult.Failed(message, account.Name));
            }

            var transporterDescriptor = GatewayTransporterDescriptor.CreatePost(
                PaymentPageUrl,
                new Dictionary <string, string>
            {
                { "merchantid", account.MerchantId },
                { "token", token }
            });

            var transporter = new DefaultGatewayTransporter(httpContext, transporterDescriptor);

            return(PaymentRequestResult.Succeed(transporter, account.Name));
        }
Exemple #2
0
        /// <inheritdoc />
        public override async Task <IPaymentRequestResult> RequestAsync(Invoice invoice, CancellationToken cancellationToken = default)
        {
            var httpContext = _httpContextAccessor.HttpContext;

            var account = await GetAccountAsync(invoice).ConfigureAwaitFalse();

            var url = $"{httpContext.Request.Scheme}" +
                      "://" +
                      $"{httpContext.Request.Host.ToUriComponent()}" +
                      $"{_options.Value.GatewayPath}";

            var transporterDescriptor = GatewayTransporterDescriptor.CreatePost(
                url,
                new Dictionary <string, string>
            {
                { "CommandType", "request" },
                { "trackingNumber", invoice.TrackingNumber.ToString() },
                { "amount", ((long)invoice.Amount).ToString() },
                { "redirectUrl", invoice.CallbackUrl }
            });

            var transporter = new DefaultGatewayTransporter(httpContext, transporterDescriptor);

            return(PaymentRequestResult.Succeed(transporter, account.Name));
        }
Exemple #3
0
        public static PaymentRequestResult CreateRequestResult(
            string response,
            Invoice invoice,
            AsanPardakhtGatewayAccount account,
            IHttpContextAccessor httpContextAccessor,
            MessagesOptions messagesOptions)
        {
            var result = XmlHelper.GetNodeValueFromXml(response, "RequestOperationResult", "http://tempuri.org/");

            var splitedResult = result.Split(',');

            var    isSucceed = splitedResult.Length == 2 && splitedResult[0] == "0";
            string message   = null;

            if (!isSucceed)
            {
                message = AsanPardakhtResultTranslator.TranslateRequest(splitedResult[0], messagesOptions);

                return(PaymentRequestResult.Failed(message));
            }

            var transporter = new GatewayPost(
                httpContextAccessor,
                PaymentPageUrl,
                new Dictionary <string, string>
            {
                { "RefId", splitedResult[1] }
            });

            return(PaymentRequestResult.Succeed(transporter, account.Name));
        }
Exemple #4
0
        public static async Task <PaymentRequestResult> CreateRequestResult(
            HttpResponseMessage responseMessage,
            HttpContext httpContext,
            YekPayGatewayAccount account,
            YekPayGatewayOptions gatewayOptions,
            MessagesOptions optionsMessages)
        {
            var message = await responseMessage.Content.ReadAsStringAsync();

            var response = JsonConvert.DeserializeObject <YekPayResponseModel>(message);

            if (response == null)
            {
                return(PaymentRequestResult.Failed(optionsMessages.InvalidDataReceivedFromGateway, account.Name));
            }

            if (response.Code != SuccessCode)
            {
                var failureMessage = response.Description ?? optionsMessages.UnexpectedErrorText;

                return(PaymentRequestResult.Failed(failureMessage, account.Name));
            }

            var paymentPageUrl = gatewayOptions.PaymentPageUrl + response.Authority;

            var result = PaymentRequestResult.SucceedWithRedirect(account.Name, httpContext, paymentPageUrl);

            result.DatabaseAdditionalData.Add(AuthorityAdditionalDataKey, response.Authority);

            return(result);
        }
Exemple #5
0
        public static PaymentRequestResult CreateRequestResult(MelliApiRequestResult result, IHttpContextAccessor httpContextAccessor, MelliGatewayAccount account, MessagesOptions messagesOptions)
        {
            if (result == null)
            {
                return(PaymentRequestResult.Failed(messagesOptions.UnexpectedErrorText));
            }

            var isSucceed = result.ResCode == SuccessCode;

            if (!isSucceed)
            {
                string message;

                if (result.ResCode == DuplicateTrackingNumberCode)
                {
                    message = messagesOptions.DuplicateTrackingNumber;
                }
                else
                {
                    message = !result.Description.IsNullOrEmpty()
                        ? result.Description
                        : MelliRequestResultTranslator.Translate(result.ResCode, messagesOptions);
                }

                return(PaymentRequestResult.Failed(message, account.Name));
            }

            var paymentPageUrl = $"{PaymentPageUrl}/Index?token={result.Token}";

            return(PaymentRequestResult.Succeed(new GatewayRedirect(httpContextAccessor, paymentPageUrl), account.Name));
        }
        public void CreateSimplePaymentRequestWithCardHolderData()
        {
            PaymentRequestRequest paymentRequest = new PaymentRequestRequest()
            {
                Terminal     = GatewayConstants.terminal,
                ShopOrderId  = "payment-req-" + Guid.NewGuid().ToString(),
                Amount       = Amount.Get(42.34, Currency.EUR),
                CustomerInfo =
                {
                    CardHolder      = new CardHolderData {
                        Name        = "Test Cardholder",
                        Email       = "*****@*****.**",
                        HomePhone   = "00011122",
                        WorkPhone   = "00011133",
                        MobilePhone = "00011144"
                    }
                }
            };

            PaymentRequestResult result = _api.CreatePaymentRequest(paymentRequest);

            Assert.AreEqual(Result.Success, result.Result);
            Assert.IsNotEmpty(result.PaymentRequestId);

            //System.Diagnostics.Process.Start(result.Url);
        }
        public void DoNotSendBothTaxAmountAndTaxPercent()
        {
            PaymentRequestRequest paymentRequest = new PaymentRequestRequest()
            {
                Terminal    = GatewayConstants.terminal,
                ShopOrderId = "payment-req-" + Guid.NewGuid().ToString(),
                Amount      = Amount.Get(5056.93, Currency.EUR),
                Type        = AuthType.payment,

                // Orderlines
                OrderLines =
                {
                    new PaymentOrderLine()
                    {
                        Description = "The Item Desc",
                        ItemId      = "itemId1",
                        Quantity    = 10,
                        TaxPercent  = 10,
                        UnitCode    = "unitCode",
                        UnitPrice   = 500,
                        Discount    = 0.00,
                        GoodsType   = GoodsType.Item,
                    },
                }
            };

            // And make the actual invocation.
            PaymentRequestResult result = _api.CreatePaymentRequest(paymentRequest);

            Assert.AreEqual(null, result.ResultMerchantMessage);
            Assert.AreEqual(Result.Success, result.Result);
            Assert.IsNotEmpty(result.Url);
            Assert.IsNotEmpty(result.DynamicJavascriptUrl);
            Assert.IsNotEmpty(result.PaymentRequestId);
        }
Exemple #8
0
        public static PaymentRequestResult CreateRequestResult(string webServiceResponse, IHttpContextAccessor httpContextAccessor, MessagesOptions messagesOptions)
        {
            var result = XmlHelper.GetNodeValueFromXml(webServiceResponse, "return");

            var arrayResult = result.Split(',');

            var resCode = arrayResult[0];
            var refId   = arrayResult.Length > 1 ? arrayResult[1] : string.Empty;

            var isSucceed = resCode == OkResult;

            if (!isSucceed)
            {
                var message = resCode == DuplicateOrderNumberResult
                    ? messagesOptions.DuplicateTrackingNumber
                    : MellatGatewayResultTranslator.Translate(resCode, messagesOptions);

                return(PaymentRequestResult.Failed(message));
            }

            var transporter = new GatewayPost(
                httpContextAccessor,
                PaymentPageUrl,
                new Dictionary <string, string>
            {
                { "RefId", refId }
            });

            return(PaymentRequestResult.Succeed(transporter));
        }
Exemple #9
0
        public static PaymentRequestResult CreateRequestResult(
            string webServiceResponse,
            HttpContext httpContext,
            MellatGatewayOptions gatewayOptions,
            MessagesOptions messagesOptions,
            GatewayAccount account)
        {
            var result = XmlHelper.GetNodeValueFromXml(webServiceResponse, "return");

            var arrayResult = result.Split(',');

            var resCode = arrayResult[0];
            var refId   = arrayResult.Length > 1 ? arrayResult[1] : string.Empty;

            var isSucceed = resCode == OkResult;

            if (!isSucceed)
            {
                var message = resCode == DuplicateOrderNumberResult
                    ? messagesOptions.DuplicateTrackingNumber
                    : MellatGatewayResultTranslator.Translate(resCode, messagesOptions);

                return(PaymentRequestResult.Failed(message, account.Name));
            }

            return(PaymentRequestResult.SucceedWithPost(
                       account.Name,
                       httpContext,
                       gatewayOptions.PaymentPageUrl,
                       new Dictionary <string, string>
            {
                { "RefId", refId }
            }));
        }
        public async Task <PaymentRequestResult> PaymentRequestAsync(PaymentRequestConfig requestConfig)
        {
            var zp = GetService();

            var paymentRequestRequest = GetPaymentRequestRequest(requestConfig);

            var response = await zp.PaymentRequestAsync(paymentRequestRequest);

            await zp.CloseAsync();

            CheckStatus(response);

            var authority = response.Body.Authority;
            var paymentId = await zarinPalPaymentRepository.InsertAsync(requestConfig.Amount, authority);

            var paymentUrl = paymentUrlBase + authority;

            var result = new PaymentRequestResult()
            {
                PaymentId  = paymentId,
                PaymentURL = paymentUrl
            };

            return(result);
        }
Exemple #11
0
        public static async Task <PaymentRequestResult> CreateRequestResult(
            HttpResponseMessage responseMessage,
            HttpContext httpContext,
            ZibalGatewayAccount account,
            ZibalGatewayOptions gatewayOptions,
            MessagesOptions messagesOptions)
        {
            var message = await responseMessage.Content.ReadAsStringAsync();

            var response = JsonConvert.DeserializeObject <ZibalResponseModel>(message);

            if (response == null)
            {
                return(PaymentRequestResult.Failed(messagesOptions.InvalidDataReceivedFromGateway, account.Name));
            }

            if (response.Result != SuccessCode)
            {
                var failureMessage = ZibalTranslator.TranslateResult(response.Result) ?? response.Message ?? messagesOptions.PaymentFailed;

                return(PaymentRequestResult.Failed(failureMessage, account.Name, response.Result.ToString()));
            }

            var paymentPageUrl = string.IsNullOrEmpty(response.PayLink)
                                ? GetPaymentPageUrl(gatewayOptions.PaymentPageUrl, response.TrackId)
                                : response.PayLink;

            var result = PaymentRequestResult.SucceedWithRedirect(account.Name, httpContext, paymentPageUrl);

            result.DatabaseAdditionalData.Add(TrackIdAdditionalDataKey, response.TrackId.ToString());

            return(result);
        }
        public static PaymentRequestResult CreateRequestResult(
            string response,
            AsanPardakhtGatewayAccount account,
            HttpContext httpContext,
            AsanPardakhtGatewayOptions gatewayOptions,
            MessagesOptions messagesOptions)
        {
            var result = XmlHelper.GetNodeValueFromXml(response, "RequestOperationResult", "http://tempuri.org/");

            var splitedResult = result.Split(',');

            var isSucceed = splitedResult.Length == 2 && splitedResult[0] == "0";

            if (!isSucceed)
            {
                var message = AsanPardakhtResultTranslator.TranslateRequest(splitedResult[0], messagesOptions);

                return(PaymentRequestResult.Failed(message, account.Name));
            }

            return(PaymentRequestResult.SucceedWithPost(
                       account.Name,
                       httpContext,
                       gatewayOptions.PaymentPageUrl,
                       new Dictionary <string, string>
            {
                { "RefId", splitedResult[1] }
            }));
        }
        public static PaymentRequestResult CreateRequestResult(string response,
                                                               HttpContext httpContext,
                                                               ZarinPalGatewayAccount account,
                                                               MessagesOptions messagesOptions)
        {
            var status    = XmlHelper.GetNodeValueFromXml(response, "Status", "http://zarinpal.com/");
            var authority = XmlHelper.GetNodeValueFromXml(response, "Authority", "http://zarinpal.com/");

            var isSucceed = string.Equals(status, NumericOkResult, StringComparison.InvariantCultureIgnoreCase);

            if (!isSucceed)
            {
                var message = ZarinPalStatusTranslator.Translate(status, messagesOptions);

                return(PaymentRequestResult.Failed(message, account.Name));
            }

            var paymentPageUrl = GetWebPageUrl(account.IsSandbox) + authority;

            var transporterDescriptor = GatewayTransporterDescriptor.CreateRedirect(paymentPageUrl);

            var transporter = new DefaultGatewayTransporter(httpContext, transporterDescriptor);

            return(PaymentRequestResult.Succeed(transporter, account.Name));
        }
Exemple #14
0
        public static PaymentRequestResult CreateRequestResult(string webServiceResponse, IHttpContextAccessor httpContextAccessor, MessagesOptions messagesOptions)
        {
            var token   = XmlHelper.GetNodeValueFromXml(webServiceResponse, "Token", "https://pec.Shaparak.ir/NewIPGServices/Sale/SaleService");
            var status  = XmlHelper.GetNodeValueFromXml(webServiceResponse, "Status", "https://pec.Shaparak.ir/NewIPGServices/Sale/SaleService");
            var message = XmlHelper.GetNodeValueFromXml(webServiceResponse, "Message", "https://pec.Shaparak.ir/NewIPGServices/Sale/SaleService");

            var isSucceed = !status.IsNullOrEmpty() &&
                            status == "0" &&
                            !token.IsNullOrEmpty();

            if (!isSucceed)
            {
                if (message == null)
                {
                    message = messagesOptions.PaymentFailed;
                }

                return(PaymentRequestResult.Failed(message));
            }

            var paymentPageUrl = $"{PaymentPageUrl}?Token={token}";

            var result = new PaymentRequestResult
            {
                IsSucceed          = true,
                GatewayTransporter = new GatewayRedirect(httpContextAccessor, paymentPageUrl)
            };

            result.DatabaseAdditionalData.Add("token", token);

            return(result);
        }
Exemple #15
0
        public static PaymentRequestResult CreateRequestResult(
            string webServiceResponse,
            HttpContext httpContext,
            ParsianGatewayAccount account,
            ParsianGatewayOptions gatewayOptions,
            MessagesOptions messagesOptions)
        {
            var token   = XmlHelper.GetNodeValueFromXml(webServiceResponse, "Token", "https://pec.Shaparak.ir/NewIPGServices/Sale/SaleService");
            var status  = XmlHelper.GetNodeValueFromXml(webServiceResponse, "Status", "https://pec.Shaparak.ir/NewIPGServices/Sale/SaleService");
            var message = XmlHelper.GetNodeValueFromXml(webServiceResponse, "Message", "https://pec.Shaparak.ir/NewIPGServices/Sale/SaleService");

            var isSucceed = !status.IsNullOrEmpty() &&
                            status == "0" &&
                            !token.IsNullOrEmpty();

            if (!isSucceed)
            {
                if (message == null)
                {
                    message = messagesOptions.PaymentFailed;
                }

                return(PaymentRequestResult.Failed(message, account.Name));
            }

            var paymentPageUrl = $"{gatewayOptions.PaymentPageUrl}?Token={token}";

            var result = PaymentRequestResult.SucceedWithRedirect(account.Name, httpContext, paymentPageUrl);

            result.DatabaseAdditionalData.Add("token", token);

            return(result);
        }
Exemple #16
0
        [Test]         // Not really a unit test, just a Klarna calling example
        public static void Main()
        {
            String orderId = "Example_Klarna_" + new Random().Next();

            CustomerAddress address = new CustomerAddress {
                Address    = "Sæffleberggate 56,1 mf",
                City       = "Varde",
                Country    = "DK",
                Firstname  = "Testperson-dk",
                Lastname   = "Approved",
                Region     = "DK",
                PostalCode = "6800"
            };

            PaymentRequestRequest request = new PaymentRequestRequest {
                ShopOrderId  = orderId,
                Terminal     = "AltaPay Klarna DK",
                Amount       = Amount.Get(5.5, Currency.DKK),
                Type         = AuthType.payment,
                CustomerInfo = new CustomerInfo {
                    Email           = "*****@*****.**",
                    Username        = "******",
                    CustomerPhone   = "20123456",
                    BankName        = "My Bank",
                    BankPhone       = "+45 12-34 5678",
                    BillingAddress  = address,
                    ShippingAddress = address
                }
            };

            request.OrderLines = new List <PaymentOrderLine> {
                new PaymentOrderLine {
                    Description = "description 1",
                    ItemId      = "id 01",
                    Quantity    = 1,
                    UnitPrice   = 1.1,
                    GoodsType   = GoodsType.Item
                },
                new PaymentOrderLine {
                    Description = "description 2",
                    ItemId      = "id 02",
                    Quantity    = 2,
                    UnitPrice   = 2.2,
                    GoodsType   = GoodsType.Item
                }
            };


            PaymentRequestResult result = _api.CreatePaymentRequest(request);

            // Access the url below and use the social security number 0801363945 in the page form to complete the Klarna order
            System.Console.WriteLine(result.Url);
        }
        /// <summary>
        /// Example for performing simple create payment request with Agreement.
        /// </summary>
        public void CreateSimplePaymentRequestWithAgreement()
        {
            //dedicated terminal on the gateway
            string terminal = "AltaPay Dev Terminal";

            //Instantiation of the payment request class
            //this class is used for forwarding all the data needed for create payment request
            //For simple payment request required properties to be set are gateway terminal, shop order ID
            //and amount along with currency
            PaymentRequestRequest paymentRequest = new PaymentRequestRequest
            {
                Terminal    = terminal,
                ShopOrderId = "AGREEMENTS_UI_csharp_example_payment-req-" + Guid.NewGuid().ToString(),
                Amount      = Amount.Get(777.77, Currency.EUR),
                //set the properties for redirection URLs
                //where user should be redirected after submitting payment on the gateway
                Config = new PaymentRequestConfig
                {
                    CallbackFormUrl         = "http://demoshop.pensio.com/Form",
                    CallbackOkUrl           = "http://demoshop.pensio.com/Ok",
                    CallbackFailUrl         = "http://demoshop.pensio.com/Fail",
                    CallbackRedirectUrl     = "http://demoshop.pensio.com/Redirect",
                    CallbackNotificationUrl = "http://demoshop.pensio.com/Notification",
                    CallbackOpenUrl         = "http://demoshop.pensio.com/Open",
                    CallbackVerifyOrderUrl  = "http://demoshop.pensio.com/VerifyOrder"
                },

                AgreementConfig = new AgreementConfig
                {
                    AgreementType            = AgreementType.unscheduled,
                    AgreementUnscheduledType = AgreementUnscheduledType.incremental
                }
            };

            //execute create payment method
            PaymentRequestResult paymentRequestResult = _api.CreatePaymentRequest(paymentRequest);

            //Result property contains information if the request was successful or not
            if (paymentRequestResult.Result == Result.Success)
            {
                //URL to the payment form page to redirect user
                string paymentFormURL = paymentRequestResult.Url;

                //Payment request ID returned from the gateway
                string paymentRequestId = paymentRequestResult.PaymentRequestId;
            }
            else
            {
                //error messages contain information about what went wrong
                string errorMerchantMessage = paymentRequestResult.ResultMerchantMessage;
                string errorMessage         = paymentRequestResult.ResultMessage;
            }
        }
Exemple #18
0
        public static PaymentRequestResult CreateRequestResult(string response, IHttpContextAccessor httpContextAccessor, PayIrGatewayAccount account)
        {
            var result = JsonConvert.DeserializeObject <PayIrRequestResponseModel>(response);

            if (!result.IsSucceed)
            {
                return(PaymentRequestResult.Failed(result.ErrorMessage, account.Name));
            }

            var paymentPageUrl = $"{PaymentPageUrl}{result.Token}";

            return(PaymentRequestResult.Succeed(new GatewayRedirect(httpContextAccessor, paymentPageUrl), account.Name));
        }
Exemple #19
0
        public static PaymentRequestResult CreateRequestResult(string response, HttpContext httpContext, PayIrGatewayAccount account, PayIrGatewayOptions gatewayOptions)
        {
            var result = JsonConvert.DeserializeObject <PayIrRequestResponseModel>(response);

            if (!result.IsSucceed)
            {
                return(PaymentRequestResult.Failed(result.ErrorMessage, account.Name));
            }

            var paymentPageUrl = $"{gatewayOptions.PaymentPageUrl}{result.Token}";

            return(PaymentRequestResult.SucceedWithRedirect(account.Name, httpContext, paymentPageUrl));
        }
Exemple #20
0
        public static PaymentRequestResult CreateRequestResult(Invoice invoice, IHttpContextAccessor httpContextAccessor, SamanGatewayAccount account)
        {
            var transporter = new GatewayPost(
                httpContextAccessor,
                PaymentPageUrl,
                new Dictionary <string, string>
            {
                { "Amount", invoice.Amount.ToLongString() },
                { "MID", account.MerchantId },
                { "ResNum", invoice.TrackingNumber.ToString() },
                { "RedirectURL", invoice.CallbackUrl }
            });

            return(PaymentRequestResult.Succeed(transporter, account.Name));
        }
Exemple #21
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public static PaymentRequestResult ToPaymentResult(this MellatPaymentResult input)
        {
            var result = new PaymentRequestResult {
                PaymentPageUrl = PaymentPageUrl,
                Message        = input.Message,
                Token          = input.RefId
            };

            if (input.Success)
            {
                result.Status = PaymentRequestStatus.Succeeded;
            }

            return(result);
        }
Exemple #22
0
        private static async Task <PaymentRequestResult> CreateMobilePaymentRequest(
            Invoice invoice,
            HttpContext httpContext,
            SamanGatewayAccount account,
            HttpClient httpClient,
            SamanGatewayOptions gatewayOptions,
            MessagesOptions messagesOptions,
            CancellationToken cancellationToken)
        {
            var data = new SamanMobilePaymentTokenRequest
            {
                TerminalId  = account.MerchantId,
                ResNum      = invoice.TrackingNumber.ToString(),
                Amount      = invoice.Amount,
                RedirectUrl = invoice.CallbackUrl,
                Action      = "Token"
            };

            var responseMessage = await httpClient.PostJsonAsync(gatewayOptions.MobileApiTokenUrl, data, cancellationToken);

            var response = await responseMessage.Content.ReadAsStringAsync();

            var tokenResponse = JsonConvert.DeserializeObject <SamanMobilePaymentTokenResponse>(response);

            if (tokenResponse == null)
            {
                var message = $"{messagesOptions.InvalidDataReceivedFromGateway} Serialized token response is null.";
                return(PaymentRequestResult.Failed(message, account.Name));
            }

            if (tokenResponse.Status == -1)
            {
                return(PaymentRequestResult.Failed(tokenResponse.GetError(), account.Name));
            }

            var result = PaymentRequestResult.SucceedWithPost(
                account.Name,
                httpContext,
                gatewayOptions.MobilePaymentPageUrl,
                new Dictionary <string, string>
            {
                { "Token", tokenResponse.Token }
            });

            result.DatabaseAdditionalData.Add(MobileGatewayKey, true.ToString());

            return(result);
        }
Exemple #23
0
        public static PaymentRequestResult CreateRequestResult(string response, HttpContext httpContext, PayIrGatewayAccount account)
        {
            var result = JsonConvert.DeserializeObject <PayIrRequestResponseModel>(response);

            if (!result.IsSucceed)
            {
                return(PaymentRequestResult.Failed(result.ErrorMessage, account.Name));
            }

            var paymentPageUrl = $"{PaymentPageUrl}{result.Token}";

            var transporterDescriptor = GatewayTransporterDescriptor.CreateRedirect(paymentPageUrl);

            var transporter = new DefaultGatewayTransporter(httpContext, transporterDescriptor);

            return(PaymentRequestResult.Succeed(transporter, account.Name));
        }
Exemple #24
0
        private static async Task <PaymentRequestResult> CreateWebPaymentRequest(
            Invoice invoice,
            HttpContext httpContext,
            SamanGatewayAccount account,
            HttpClient httpClient,
            SamanGatewayOptions gatewayOptions,
            MessagesOptions messagesOptions,
            CancellationToken cancellationToken)
        {
            var data = CreateTokenRequest(invoice, account);

            var responseMessage = await httpClient.PostXmlAsync(gatewayOptions.WebApiTokenUrl, data, cancellationToken);

            var response = await responseMessage.Content.ReadAsStringAsync();

            var token = XmlHelper.GetNodeValueFromXml(response, "result");

            string message   = null;
            var    isSucceed = true;

            if (token.IsNullOrEmpty())
            {
                message   = $"{messagesOptions.InvalidDataReceivedFromGateway} Token is null or empty.";
                isSucceed = false;
            }
            else if (long.TryParse(token, out var longToken) && longToken < 0)
            {
                message   = SamanResultTranslator.Translate(longToken, messagesOptions);
                isSucceed = false;
            }

            if (!isSucceed)
            {
                return(PaymentRequestResult.Failed(message, account.Name));
            }

            return(PaymentRequestResult.SucceedWithPost(
                       account.Name,
                       httpContext,
                       gatewayOptions.WebPaymentPageUrl,
                       new Dictionary <string, string>
            {
                { "Token", token },
                { "RedirectURL", invoice.CallbackUrl }
            }));
        }
Exemple #25
0
        public static async Task <PaymentRequestResult> CreateRequestResult(
            HttpResponseMessage responseMessage,
            IHttpContextAccessor httpContextAccessor,
            IdPayGatewayAccount account)
        {
            var response = await responseMessage.Content.ReadAsStringAsync().ConfigureAwaitFalse();

            if (!responseMessage.IsSuccessStatusCode)
            {
                var errorModel = JsonConvert.DeserializeObject <IdPayErrorModel>(response);

                return(PaymentRequestResult.Failed(errorModel.ToString(), account.Name));
            }

            var result = JsonConvert.DeserializeObject <IdPayRequestResultModel>(response);

            return(PaymentRequestResult.Succeed(new GatewayRedirect(httpContextAccessor, result.Link), account.Name));
        }
        public static PaymentRequestResult CreateRequestResult(
            Invoice invoice,
            HttpContext httpContext,
            PasargadGatewayAccount account,
            IPasargadCrypto crypto,
            PasargadGatewayOptions gatewayOptions)
        {
            var invoiceDate = GetTimeStamp(DateTime.Now);

            var timeStamp = invoiceDate;

            var dataToSign = string.Format("#{0}#{1}#{2}#{3}#{4}#{5}#{6}#{7}#",
                                           account.MerchantCode,
                                           account.TerminalCode,
                                           invoice.TrackingNumber,
                                           invoiceDate,
                                           (long)invoice.Amount,
                                           invoice.CallbackUrl,
                                           ActionNumber,
                                           timeStamp);

            var signedData = crypto.Encrypt(account.PrivateKey, dataToSign);

            var result = PaymentRequestResult.SucceedWithPost(
                account.Name,
                httpContext,
                gatewayOptions.PaymentPageUrl,
                new Dictionary <string, string>
            {
                { "merchantCode", account.MerchantCode },
                { "terminalCode", account.TerminalCode },
                { "invoiceNumber", invoice.TrackingNumber.ToString() },
                { "invoiceDate", invoiceDate },
                { "amount", invoice.Amount.ToLongString() },
                { "redirectAddress", invoice.CallbackUrl },
                { "action", ActionNumber },
                { "timeStamp", timeStamp },
                { "sign", signedData }
            });

            result.DatabaseAdditionalData.Add("timeStamp", timeStamp);

            return(result);
        }
Exemple #27
0
        public static PaymentRequestResult CreateRequestResult(
            string webServiceResponse,
            Invoice invoice,
            HttpContext httpContext,
            MellatGatewayOptions gatewayOptions,
            MessagesOptions messagesOptions,
            GatewayAccount account)
        {
            var result = XmlHelper.GetNodeValueFromXml(webServiceResponse, "return");

            var arrayResult = result.Split(',');

            var resCode = arrayResult[0];
            var refId   = arrayResult.Length > 1 ? arrayResult[1] : string.Empty;

            var isSucceed = resCode == OkResult;

            if (!isSucceed)
            {
                var message = resCode == DuplicateOrderNumberResult
                    ? messagesOptions.DuplicateTrackingNumber
                    : MellatGatewayResultTranslator.Translate(resCode, messagesOptions);

                return(PaymentRequestResult.Failed(message, account.Name));
            }

            var form = new Dictionary <string, string>
            {
                { "RefId", refId }
            };

            var additionalData = invoice.GetMellatAdditionalData();

            if (!string.IsNullOrWhiteSpace(additionalData?.MobileNumber))
            {
                form.Add("MobileNo", additionalData.MobileNumber);
            }

            return(PaymentRequestResult.SucceedWithPost(
                       account.Name,
                       httpContext,
                       gatewayOptions.PaymentPageUrl,
                       form));
        }
Exemple #28
0
        public static async Task <PaymentRequestResult> CreateRequestResult(
            HttpResponseMessage responseMessage,
            HttpContext httpContext,
            SepehrGatewayAccount account,
            MessagesOptions messages)
        {
            if (!responseMessage.IsSuccessStatusCode)
            {
                return(PaymentRequestResult.Failed($"Operation failed. Http Status: {responseMessage.StatusCode}", account.Name));
            }

            var response = await responseMessage.Content.ReadAsStringAsync().ConfigureAwaitFalse();

            var result = JsonConvert.DeserializeObject <TokenResponseModel>(response);

            if (result == null)
            {
                return(PaymentRequestResult.Failed(messages.InvalidDataReceivedFromGateway, account.Name));
            }

            if (result.Status != 0)
            {
                var message = SepehrGatewayResultTranslator.Translate(result.Status.ToString(), messages);

                return(PaymentRequestResult.Failed(message, account.Name));
            }

            if (result.AccessToken.IsNullOrWhiteSpace())
            {
                return(PaymentRequestResult.Failed(messages.InvalidDataReceivedFromGateway, account.Name));
            }

            var transporterDescriptor = GatewayTransporterDescriptor.CreatePost(
                PaymentPageUrl,
                new Dictionary <string, string>
            {
                { "TerminalID", account.TerminalId.ToString() },
                { "token", result.AccessToken }
            });

            var transporter = new DefaultGatewayTransporter(httpContext, transporterDescriptor);

            return(PaymentRequestResult.Succeed(transporter, account.Name));
        }
        public void CreateSimplePaymentRequest()
        {
            PaymentRequestRequest paymentRequest = new PaymentRequestRequest()
            {
                Terminal    = GatewayConstants.terminal,
                ShopOrderId = "payment-req-" + Guid.NewGuid().ToString(),
                Amount      = Amount.Get(42.34, Currency.EUR),
            };

            PaymentRequestResult result = _api.CreatePaymentRequest(paymentRequest);

            Assert.AreEqual(null, result.ResultMerchantMessage);
            Assert.AreEqual(Result.Success, result.Result);
            Assert.IsNotEmpty(result.Url);
            Assert.IsNotEmpty(result.DynamicJavascriptUrl);
            Assert.IsNotEmpty(result.PaymentRequestId);

            //System.Diagnostics.Process.Start(result.Url);
        }
Exemple #30
0
        public static PaymentRequestResult CreateRequestResult(
            string response,
            IHttpContextAccessor httpContextAccessor,
            ZarinPalGatewayAccount account)
        {
            var status    = XmlHelper.GetNodeValueFromXml(response, "Status", "http://zarinpal.com/");
            var authority = XmlHelper.GetNodeValueFromXml(response, "Authority", "http://zarinpal.com/");

            var isSucceed = string.Equals(status, OkResult, StringComparison.InvariantCultureIgnoreCase);

            if (!isSucceed)
            {
                var message = $"Error {status}";

                return(PaymentRequestResult.Failed(message, account.Name));
            }

            var paymentPageUrl = GetWebPageUrl(account.IsSandbox) + authority;

            return(PaymentRequestResult.Succeed(new GatewayRedirect(httpContextAccessor, paymentPageUrl), account.Name));
        }