public override async Task <VerifyResult> VerifyAsync(GatewayVerifyPaymentContext verifyPaymentContext) { if (verifyPaymentContext == null) { throw new ArgumentNullException(nameof(verifyPaymentContext)); } string state = verifyPaymentContext.RequestParameters.GetAs <string>("state"); if (state.IsNullOrWhiteSpace()) { return(new VerifyResult(Gateway.Saman, string.Empty, string.Empty, VerifyResultStatus.Failed, "Invalid data is received from the gateway.")); } string referenceId = verifyPaymentContext.RequestParameters.GetAs <string>("ResNum"); string transactionId = verifyPaymentContext.RequestParameters.GetAs <string>("RefNum"); IGatewayResultTranslator resultTranslator = new SamanStateTranslator(); var translatedMessage = resultTranslator.Translate(state); var isSuccess = state.Equals("OK", StringComparison.InvariantCultureIgnoreCase); var status = isSuccess ? VerifyResultStatus.Success : VerifyResultStatus.Failed; if (!isSuccess) { return(new VerifyResult(Gateway.Saman, referenceId, transactionId, status, translatedMessage)); } string verifyXml = CreateVerifyXml(SamanConfiguration.MerchantId, transactionId); var result = await WebHelper.SendXmlWebRequestAsync(WebServiceUrl, verifyXml); result = XmlHelper.GetNodeValueFromXml(result, "result"); // This result is actually: TotalAmount // it must be equals to TotalAmount in database. int integerResult = Convert.ToInt32(result); isSuccess = integerResult > 0 && integerResult == verifyPaymentContext.Amount; status = isSuccess ? VerifyResultStatus.Success : VerifyResultStatus.Failed; resultTranslator = new SamanResultTranslator(); translatedMessage = resultTranslator.Translate(integerResult); return(new VerifyResult(Gateway.Saman, referenceId, transactionId, status, translatedMessage)); }
public override VerifyResult Verify(GatewayVerifyPaymentContext verifyPaymentContext) { // Callback var resultCode = verifyPaymentContext.RequestParameters.GetAs <string>("ResultCode"); string referenceId = verifyPaymentContext.RequestParameters.GetAs <string>("InvoiceNumber"); // This is TransactionId (in my system) string transactionId = verifyPaymentContext.RequestParameters.GetAs <string>("referenceId"); bool isSuccess = resultCode == "100"; IGatewayResultTranslator gatewayResultTranslator = new TejaratPayRequestResultTranslator(); if (!isSuccess) { var callbackTranslatedMessage = gatewayResultTranslator.Translate(resultCode); return(new VerifyResult(Gateway.Tejarat, referenceId, transactionId, VerifyResultStatus.Failed, callbackTranslatedMessage)); } // Now verify string webServiceXml = CreateVerifyWebServiceXml( merchantId: TejaratConfiguration.Merchant, referenceNumber: transactionId, token: "", sha1Key: TejaratConfiguration.Sha1Key); var webServiceResponse = WebHelper.SendXmlWebRequest(VerifyServiceUrl, webServiceXml); string result = XmlHelper.GetNodeValueFromXml(webServiceResponse, "verifyResponse", "http://tejarat/paymentGateway/definitions"); // This result is actually: TotalAmount // it must be equals to TotalAmount in database. int integerResult = Convert.ToInt32(result); gatewayResultTranslator = new TejaratVerifyResultTranslator(); var verifyTranslatedMessage = gatewayResultTranslator.Translate(resultCode); isSuccess = integerResult > 0 && integerResult == verifyPaymentContext.Amount; var status = isSuccess ? VerifyResultStatus.Success : VerifyResultStatus.Failed; return(new VerifyResult(Gateway.Tejarat, referenceId, transactionId, status, verifyTranslatedMessage)); }
public override async Task <VerifyResult> VerifyAsync(GatewayVerifyPaymentContext verifyPaymentContext) { string resCode = verifyPaymentContext.RequestParameters.GetAs <string>("ResCode", caseSensitive: true); if (resCode.IsNullOrWhiteSpace()) { return(new VerifyResult(Gateway.Mellat, string.Empty, string.Empty, VerifyResultStatus.Failed, "Invalid data is received from the gateway")); } // Reference ID string refId = verifyPaymentContext.RequestParameters.GetAs <string>("RefId", caseSensitive: true); // Transaction ID var saleReferenceId = verifyPaymentContext.RequestParameters.GetAs <string>("SaleReferenceId", caseSensitive: true); IGatewayResultTranslator gatewayResultTranslator = new MellatGatewayResultTranslator(); var translatedResult = gatewayResultTranslator.Translate(resCode); var isSuccess = resCode == "0"; if (!isSuccess) { return(new VerifyResult(Gateway.Mellat, refId, saleReferenceId, VerifyResultStatus.Failed, translatedResult)); } string settleWebServiceXml = CreateSettleWebService( terminalId: Configuration.TerminalId, userName: Configuration.UserName, userPassword: Configuration.UserPassword, orderId: verifyPaymentContext.OrderNumber, saleOrderId: verifyPaymentContext.OrderNumber, saleReferenceId: Convert.ToInt64(saleReferenceId)); string xmlResult = await WebHelper.SendXmlWebRequestAsync(GetWebServiceUrl(), settleWebServiceXml); var result = XmlHelper.GetNodeValueFromXml(xmlResult, "return"); isSuccess = result == "0"; var status = isSuccess ? VerifyResultStatus.Success : VerifyResultStatus.Failed; translatedResult = gatewayResultTranslator.Translate(result); return(new VerifyResult(Gateway.Mellat, refId, saleReferenceId, status, translatedResult)); }
public override VerifyResult Verify(GatewayVerifyPaymentContext verifyPaymentContext) { // Callback var referenceId = verifyPaymentContext.RequestParameters.GetAs <string>("au"); var response = verifyPaymentContext.RequestParameters.GetAs <string>("rs"); if (referenceId.IsNullOrWhiteSpace() || response.IsNullOrWhiteSpace()) { return(new VerifyResult(Gateway.Parsian, referenceId, string.Empty, VerifyResultStatus.Failed, "Invalid data is received from the gateway.")); } IGatewayResultTranslator gatewayResultTranslator = new ParsianStatusTranslator(); var isSuccess = response != "0"; if (!isSuccess) { var callbackTranslatedMessage = gatewayResultTranslator.Translate(Convert.ToByte(response)); return(new VerifyResult(Gateway.Parsian, referenceId, string.Empty, VerifyResultStatus.Failed, callbackTranslatedMessage)); } // Now verify string verifyWebServiceXml = CreateVerifyWebServiceXml( pin: ParsianConfiguration.Pin, authority: Convert.ToInt64(referenceId)); var verifyResult = WebHelper.SendXmlWebRequest(WebServiceUrl, verifyWebServiceXml); byte status = Convert.ToByte(XmlHelper.GetNodeValueFromXml(verifyResult, "status", "http://tempuri.org/")); // invoiceNumber is TransactionId var transactionId = XmlHelper.GetNodeValueFromXml(verifyResult, "invoiceNumber", "http://tempuri.org/"); var translatedMessage = gatewayResultTranslator.Translate(status); isSuccess = status == 0; var verifyResultStatus = isSuccess ? VerifyResultStatus.Success : VerifyResultStatus.Failed; return(new VerifyResult(Gateway.Parsian, referenceId, transactionId, verifyResultStatus, translatedMessage)); }
public override VerifyResult Verify(GatewayVerifyPaymentContext verifyPaymentContext) { var result = verifyPaymentContext.RequestParameters.GetAs <string>("Result"); if (string.IsNullOrWhiteSpace(result)) { return(new VerifyResult(Gateway.ParbadVirtualGateway, string.Empty, string.Empty, VerifyResultStatus.Failed, "Invalid data is received from the gateway")); } var referenceId = verifyPaymentContext.RequestParameters.GetAs <string>("ReferenceId"); var transactionId = verifyPaymentContext.RequestParameters.GetAs <string>("TransactionId"); IGatewayResultTranslator gatewayResultTranslator = new ParbadVirtualGatewayResultTranslator(); var translatedMessage = gatewayResultTranslator.Translate(result); var isSuccess = result == "true"; var status = isSuccess ? VerifyResultStatus.Success : VerifyResultStatus.Failed; return(new VerifyResult(Gateway.ParbadVirtualGateway, referenceId, transactionId, status, translatedMessage)); }
public override VerifyResult Verify(GatewayVerifyPaymentContext verifyPaymentContext) { // Reference ID var referenceId = verifyPaymentContext.RequestParameters.GetAs <string>("iN"); // Invoice Date var invoiceDate = verifyPaymentContext.RequestParameters.GetAs <string>("iD"); // Transaction ID var transactionId = verifyPaymentContext.RequestParameters.GetAs <string>("tref"); if (string.IsNullOrWhiteSpace(referenceId) || string.IsNullOrWhiteSpace(invoiceDate) || string.IsNullOrWhiteSpace(transactionId)) { return(new VerifyResult(Gateway.Pasargad, referenceId, transactionId, VerifyResultStatus.Failed, "اطلاعات دریافت شده از درگاه بانک نامعتبر است.")); } var callbackRequestData = CreateCallbackWebRequestData(transactionId); var callBackResponse = WebHelper.SendWebRequest(CheckPaymentPageUrl, callbackRequestData, "POST", "application/x-www-form-urlencoded"); var compareReferenceId = XmlHelper.GetNodeValueFromXml(callBackResponse, "invoiceNumber"); var compareAction = XmlHelper.GetNodeValueFromXml(callBackResponse, "action"); var compareMerchantCode = XmlHelper.GetNodeValueFromXml(callBackResponse, "merchantCode"); var compareTerminalCode = XmlHelper.GetNodeValueFromXml(callBackResponse, "terminalCode"); if (string.IsNullOrWhiteSpace(compareReferenceId) || string.IsNullOrWhiteSpace(compareAction) || string.IsNullOrWhiteSpace(compareMerchantCode) || string.IsNullOrWhiteSpace(compareTerminalCode)) { return(new VerifyResult(Gateway.Pasargad, referenceId, transactionId, VerifyResultStatus.Failed, "اطلاعات دریافت شده از درگاه بانک نامعتبر است.")); } var callbackResult = XmlHelper.GetNodeValueFromXml(callBackResponse, "result"); var isCallbackSuccess = callbackResult.Equals("true", StringComparison.InvariantCultureIgnoreCase) && compareReferenceId == referenceId && compareAction == ActionNumber && compareMerchantCode == PasargadConfiguration.MerchantCode && compareTerminalCode == PasargadConfiguration.TerminalCode; if (!isCallbackSuccess) { return(new VerifyResult(Gateway.Pasargad, referenceId, transactionId, VerifyResultStatus.Failed, "پرداخت موفقيت آميز نبود و يا توسط خريدار کنسل شده است")); } var timeStamp = PasargadHelper.GetTimeStamp(DateTime.Now); var dataToSign = string.Format("#{0}#{1}#{2}#{3}#{4}#{5}#", PasargadConfiguration.MerchantCode, PasargadConfiguration.TerminalCode, verifyPaymentContext.ReferenceId, invoiceDate, (long)verifyPaymentContext.Amount, timeStamp); var signData = PasargadHelper.SignData(PasargadConfiguration.PrivateKey, dataToSign); var data = "InvoiceNumber=" + verifyPaymentContext.ReferenceId + "&InvoiceDate=" + invoiceDate + "&MerchantCode=" + PasargadConfiguration.MerchantCode + "&TerminalCode=" + PasargadConfiguration.TerminalCode + "&Amount=" + (long)verifyPaymentContext.Amount + "&TimeStamp=" + timeStamp + "&Sign=" + signData; var response = WebHelper.SendWebRequest(VerifyPaymentPageUrl, data, "POST", "application/x-www-form-urlencoded"); var result = XmlHelper.GetNodeValueFromXml(response, "result"); var resultMessage = XmlHelper.GetNodeValueFromXml(response, "resultMessage"); var isSuccess = result.Equals("true", StringComparison.InvariantCultureIgnoreCase); var status = isSuccess ? VerifyResultStatus.Success : VerifyResultStatus.Failed; return(new VerifyResult(Gateway.Pasargad, referenceId, transactionId, status, resultMessage)); }
public override VerifyResult Verify(GatewayVerifyPaymentContext verifyPaymentContext) { var resCode = verifyPaymentContext.RequestParameters.GetAs <string>("ResCode", caseSensitive: true); if (resCode.IsNullOrWhiteSpace()) { return(new VerifyResult(Gateway.Mellat, string.Empty, string.Empty, VerifyResultStatus.NotValid, "Invalid data is received from the gateway")); } // Reference ID string refId = verifyPaymentContext.RequestParameters.GetAs <string>("RefId", caseSensitive: true); // Transaction ID var saleReferenceId = verifyPaymentContext.RequestParameters.GetAs <string>("SaleReferenceId", caseSensitive: true); // To translate gateway's result IGatewayResultTranslator gatewayResultTranslator = new MellatGatewayResultTranslator(); string translatedResult; if (resCode != OkResult) { translatedResult = gatewayResultTranslator.Translate(resCode); return(new VerifyResult(Gateway.Mellat, refId, saleReferenceId, VerifyResultStatus.Failed, translatedResult)); } // Verify var webServiceVerifyXml = CreateVerifyWebService( terminalId: Configuration.TerminalId, userName: Configuration.UserName, userPassword: Configuration.UserPassword, orderId: verifyPaymentContext.OrderNumber, saleOrderId: verifyPaymentContext.OrderNumber, saleReferenceId: Convert.ToInt64(saleReferenceId)); var xmlResult = WebHelper.SendXmlWebRequest(GetWebServiceUrl(), webServiceVerifyXml); var result = XmlHelper.GetNodeValueFromXml(xmlResult, "return"); // Check if verifing is failed. VerifyResultStatus status; if (result != OkResult) { translatedResult = gatewayResultTranslator.Translate(result); status = result == AlreadyVerifiedResult ? VerifyResultStatus.AlreadyVerified : VerifyResultStatus.Failed; return(new VerifyResult(Gateway.Mellat, refId, saleReferenceId, status, translatedResult)); } // Settle var settleWebServiceXml = CreateSettleWebService( terminalId: Configuration.TerminalId, userName: Configuration.UserName, userPassword: Configuration.UserPassword, orderId: verifyPaymentContext.OrderNumber, saleOrderId: verifyPaymentContext.OrderNumber, saleReferenceId: Convert.ToInt64(saleReferenceId)); xmlResult = WebHelper.SendXmlWebRequest(GetWebServiceUrl(), settleWebServiceXml); result = XmlHelper.GetNodeValueFromXml(xmlResult, "return"); translatedResult = gatewayResultTranslator.Translate(result); var isSuccess = result == OkResult; status = isSuccess ? VerifyResultStatus.Success : VerifyResultStatus.Failed; return(new VerifyResult(Gateway.Mellat, refId, saleReferenceId, status, translatedResult)); }
public override Task <VerifyResult> VerifyAsync(GatewayVerifyPaymentContext verifyPaymentContext) { return(Task.FromResult(Verify(verifyPaymentContext))); }
public override async Task <VerifyResult> VerifyAsync(GatewayVerifyPaymentContext verifyPaymentContext) { if (verifyPaymentContext == null) { throw new ArgumentNullException(nameof(verifyPaymentContext)); } var resultCode = verifyPaymentContext.RequestParameters.GetAs <string>("ResultCode"); var token = verifyPaymentContext.RequestParameters.GetAs <string>("Token"); var merchantId = verifyPaymentContext.RequestParameters.GetAs <string>("MerchantId"); // Reference ID var referenceId = verifyPaymentContext.RequestParameters.GetAs <string>("InvoiceNumber"); // Transaction ID (IranKish's Reference ID is Transaction ID in our system) var transactionId = verifyPaymentContext.RequestParameters.GetAs <string>("ReferenceId"); // Some data cheking for sure. if (merchantId != Configuration.MerchantId || referenceId != verifyPaymentContext.OrderNumber.ToString() || token.IsNullOrWhiteSpace()) { return(new VerifyResult(Gateway.IranKish, referenceId, transactionId, VerifyResultStatus.NotValid, "Invalid data is received from the gateway")); } // To translate gateway's result IGatewayResultTranslator gatewayResultTranslator = new IranKishGatewayResultTranslator(); var translatedResult = gatewayResultTranslator.Translate(resultCode); if (resultCode != OkResult) { return(new VerifyResult(Gateway.IranKish, referenceId, transactionId, VerifyResultStatus.Failed, translatedResult)); } // Verify var webServiceVerify = CreateVerifyWebService( merchantId: Configuration.MerchantId, token: token, referenceId: transactionId); var headers = new Dictionary <string, string> { { "SOAPAction", "http://tempuri.org/IVerify/KicccPaymentsVerification" } }; var serviceResult = await WebHelper.SendXmlWebRequestAsync(VerifyWebServiceUrl, webServiceVerify, headers); var result = XmlHelper.GetNodeValueFromXml(serviceResult, "KicccPaymentsVerificationResult"); // The 'result' is actually the invoice's amount. It must equal to invoice's amount. if (!long.TryParse(result, out var integerResult)) { return(new VerifyResult(Gateway.IranKish, referenceId, transactionId, VerifyResultStatus.Failed, "پاسخ دریافت شده از درگاه پرداخت قابل بررسی نیست.")); } var isSuccess = integerResult != verifyPaymentContext.Amount; var status = isSuccess ? VerifyResultStatus.Success : VerifyResultStatus.Failed; translatedResult = isSuccess ? "تراکنش با موفقیت انجام گردید." : gatewayResultTranslator.Translate(result); return(new VerifyResult(Gateway.IranKish, referenceId, transactionId, status, translatedResult)); }