Пример #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));
        }
Пример #2
0
        public static IranKishCallbackResult CreateCallbackResult(
            InvoiceContext context,
            IranKishGatewayAccount account,
            HttpRequest httpRequest,
            MessagesOptions messagesOptions)
        {
            httpRequest.TryGetParam("ResultCode", out var resultCode);
            httpRequest.Form.TryGetValue("Token", out var token);
            httpRequest.TryGetParam("MerchantId", out var merchantId);

            // Equals to TrackingNumber in Parbad system.
            httpRequest.TryGetParamAs <long>("InvoiceNumber", out var invoiceNumber);

            // Equals to TransactionCode in Parbad system.
            httpRequest.TryGetParam("ReferenceId", out var referenceId);

            var isSucceed = false;
            PaymentVerifyResult verifyResult = null;

            if (merchantId != account.MerchantId ||
                invoiceNumber != context.Payment.TrackingNumber ||
                token.IsNullOrEmpty())
            {
                verifyResult = new PaymentVerifyResult
                {
                    TrackingNumber  = invoiceNumber,
                    TransactionCode = referenceId,
                    IsSucceed       = false,
                    Message         = messagesOptions.InvalidDataReceivedFromGateway
                };
            }
            else
            {
                var translatedMessage = IranKishGatewayResultTranslator.Translate(resultCode, messagesOptions);

                isSucceed = resultCode == OkResult;

                if (!isSucceed)
                {
                    verifyResult = new PaymentVerifyResult
                    {
                        TrackingNumber  = invoiceNumber,
                        TransactionCode = referenceId,
                        IsSucceed       = false,
                        Message         = translatedMessage
                    };
                }
            }

            return(new IranKishCallbackResult
            {
                IsSucceed = isSucceed,
                Token = token,
                InvoiceNumber = invoiceNumber,
                ReferenceId = referenceId,
                Result = verifyResult
            });
        }
Пример #3
0
 public static string CreateVerifyData(IranKishCallbackResult callbackResult, IranKishGatewayAccount account)
 {
     return
         ("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:tem=\"http://tempuri.org/\">" +
          "<soapenv:Header/>" +
          "<soapenv:Body>" +
          "<tem:KicccPaymentsVerification>" +
          $"<tem:token>{XmlHelper.EncodeXmlValue(callbackResult.Token)}</tem:token>" +
          $"<tem:merchantId>{account.MerchantId}</tem:merchantId>" +
          $"<tem:referenceNumber>{callbackResult.ReferenceId}</tem:referenceNumber>" +
          $"<tem:sha1Key>{account.Sha1Key}</tem:sha1Key>" +
          "</tem:KicccPaymentsVerification>" +
          "</soapenv:Body>" +
          "</soapenv:Envelope>");
 }
Пример #4
0
 public static string CreateRequestData(Invoice invoice, IranKishGatewayAccount account)
 {
     return
         ("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:tem=\"http://tempuri.org/\">" +
          "<soapenv:Header/>" +
          "<soapenv:Body>" +
          "<tem:MakeToken>" +
          $"<tem:amount>{(long)invoice.Amount}</tem:amount>" +
          $"<tem:merchantId>{account.MerchantId}</tem:merchantId>" +
          $"<tem:invoiceNo>{invoice.TrackingNumber}</tem:invoiceNo>" +
          "<tem:paymentId></tem:paymentId>" +
          "<tem:specialPaymentId></tem:specialPaymentId>" +
          $"<tem:revertURL>{XmlHelper.EncodeXmlValue(invoice.CallbackUrl)}</tem:revertURL>" +
          "<tem:description></tem:description>" +
          "</tem:MakeToken>" +
          "</soapenv:Body>" +
          "</soapenv:Envelope>");
 }
Пример #5
0
        public static async Task <IranKishCallbackResult> CreateCallbackResultAsync(InvoiceContext context,
                                                                                    IranKishGatewayAccount account,
                                                                                    HttpRequest httpRequest,
                                                                                    MessagesOptions messagesOptions,
                                                                                    CancellationToken cancellationToken)
        {
            var resultCode = await httpRequest.TryGetParamAsync("ResultCode", cancellationToken).ConfigureAwaitFalse();

            var token = await httpRequest.TryGetParamAsync("Token", cancellationToken).ConfigureAwaitFalse();

            var merchantId = await httpRequest.TryGetParamAsync("MerchantId", cancellationToken).ConfigureAwaitFalse();

            // Equals to TrackingNumber in Parbad system.
            var invoiceNumber = await httpRequest.TryGetParamAsAsync <long>("InvoiceNumber", cancellationToken).ConfigureAwaitFalse();

            // Equals to TransactionCode in Parbad system.
            var referenceId = await httpRequest.TryGetParamAsync("ReferenceId", cancellationToken).ConfigureAwaitFalse();

            var isSucceed = true;
            var message   = messagesOptions.InvalidDataReceivedFromGateway;
            PaymentVerifyResult verifyResult = null;

            if (!resultCode.Exists)
            {
                isSucceed = false;
                message  += "No ResultCode is received.";
            }

            if (!merchantId.Exists)
            {
                isSucceed = false;
                message  += " No MerchantId is received.";
            }
            else if (merchantId.Value != account.MerchantId)
            {
                isSucceed = false;
                message  += "MerchantId is not valid.";
            }

            if (!invoiceNumber.Exists)
            {
                isSucceed = false;
                message  += "No InvoiceNumber is received.";
            }
            else if (invoiceNumber.Value != context.Payment.TrackingNumber)
            {
                isSucceed = false;
                message  += "InvoiceNumber is not valid.";
            }

            if (!token.Exists || token.Value.IsNullOrEmpty())
            {
                isSucceed = false;
                message  += "No Token is received or it was null.";
            }

            if (!isSucceed)
            {
                verifyResult = new PaymentVerifyResult
                {
                    TrackingNumber  = invoiceNumber.Value,
                    TransactionCode = referenceId.Value,
                    Status          = PaymentVerifyResultStatus.Failed,
                    Message         = message
                };
            }
            else
            {
                isSucceed = resultCode.Value == OkResult;

                var translatedMessage = IranKishGatewayResultTranslator.Translate(resultCode.Value, messagesOptions);

                if (!isSucceed)
                {
                    verifyResult = new PaymentVerifyResult
                    {
                        TrackingNumber  = invoiceNumber.Value,
                        TransactionCode = referenceId.Value,
                        Status          = PaymentVerifyResultStatus.Failed,
                        Message         = translatedMessage
                    };
                }
            }

            return(new IranKishCallbackResult
            {
                IsSucceed = isSucceed,
                Token = token.Value,
                InvoiceNumber = invoiceNumber.Value,
                ReferenceId = referenceId.Value,
                Result = verifyResult
            });
        }