コード例 #1
0
ファイル: MellatGateway.cs プロジェクト: moostafaa/Parbad
        public override async Task <RefundResult> RefundAsync(GatewayRefundPaymentContext refundPaymentContext)
        {
            if (!long.TryParse(refundPaymentContext.TransactionId, out var longTransactionId))
            {
                throw new Exception($"Transaction ID format is not valid. Transaction ID must be Int64. Value: {refundPaymentContext.TransactionId}");
            }

            string webServiceXml = CreateReverseWebService(
                terminalId: Configuration.TerminalId,
                userName: Configuration.UserName,
                userPassword: Configuration.UserPassword,
                orderId: refundPaymentContext.OrderNumber,
                saleOrderId: refundPaymentContext.OrderNumber,
                saleReferenceId: longTransactionId);

            var xmlResult = await WebHelper.SendXmlWebRequestAsync(GetWebServiceUrl(), webServiceXml);

            var result = XmlHelper.GetNodeValueFromXml(xmlResult, "return");

            bool isSuccess = result == "0";

            var status = isSuccess ? RefundResultStatus.Success : RefundResultStatus.Failed;

            IGatewayResultTranslator gatewayResultTranslator = new MellatGatewayResultTranslator();

            var translatedResult = gatewayResultTranslator.Translate(result);

            return(new RefundResult(Gateway.Mellat, refundPaymentContext.Amount, status, translatedResult));
        }
コード例 #2
0
ファイル: MellatGateway.cs プロジェクト: moostafaa/Parbad
        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));
        }
コード例 #3
0
ファイル: MellatGateway.cs プロジェクト: mtss92/Parbad
        public override async Task <RequestResult> RequestAsync(Invoice invoice)
        {
            var webServiceXml = CreatePayRequestWebService(
                terminalId: Configuration.TerminalId,
                userName: Configuration.UserName,
                userPassword: Configuration.UserPassword,
                orderId: invoice.OrderNumber,
                amount: invoice.Amount,
                localDate: DateTime.Now.ToString("yyyyMMdd"),
                localTime: DateTime.Now.ToString("HHmmss"),
                additionalData: string.Empty,
                callBackUrl: invoice.CallbackUrl,
                payerId: 0);

            var xmlResult = await WebHelper.SendXmlWebRequestAsync(GetWebServiceUrl(), webServiceXml);

            var result = XmlHelper.GetNodeValueFromXml(xmlResult, "return");

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

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

            IGatewayResultTranslator gatewayResultTranslator = new MellatGatewayResultTranslator();

            var translatedResult = gatewayResultTranslator.Translate(resCode);

            var isSucceed = resCode == OkResult;

            if (!isSucceed)
            {
                var status = resCode == DuplicateOrderNumberResult ? RequestResultStatus.DuplicateOrderNumber : RequestResultStatus.Failed;

                return(new RequestResult(status, translatedResult, refId));
            }

            var postHtmlForm = CreatePayRequestHtmlForm(PaymentPageUrl, refId);

            return(new RequestResult(RequestResultStatus.Success, translatedResult, refId)
            {
                BehaviorMode = GatewayRequestBehaviorMode.Post,
                Content = postHtmlForm
            });
        }
コード例 #4
0
ファイル: MellatGateway.cs プロジェクト: mtss92/Parbad
        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));
        }