示例#1
0
        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));
        }
示例#2
0
        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));
        }
示例#3
0
        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));
        }
示例#4
0
        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));
        }
示例#5
0
        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));
        }
示例#6
0
        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));
        }
示例#7
0
        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));
        }
示例#8
0
 public override Task <VerifyResult> VerifyAsync(GatewayVerifyPaymentContext verifyPaymentContext)
 {
     return(Task.FromResult(Verify(verifyPaymentContext)));
 }
示例#9
0
        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));
        }