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)); }
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 }); }
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>"); }
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>"); }
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 }); }