Пример #1
0
        public static PaymentVerifyResult CreateVerifyResult(string webServiceResponse, InvoiceContext context, SamanCallbackResult callbackResult, MessagesOptions messagesOptions)
        {
            var stringResult = XmlHelper.GetNodeValueFromXml(webServiceResponse, "result");

            //  This result is actually: TotalAmount
            //  it must be equals to TotalAmount in database.
            var numericResult = Convert.ToInt64(stringResult);

            var isSuccess = numericResult > 0 && numericResult == (long)context.Payment.Amount;

            var message = isSuccess
                ? messagesOptions.PaymentSucceed
                : SamanResultTranslator.Translate(numericResult, messagesOptions);

            var result = new PaymentVerifyResult
            {
                Status          = isSuccess ? PaymentVerifyResultStatus.Succeed : PaymentVerifyResultStatus.Failed,
                TransactionCode = callbackResult.TransactionId,
                Message         = message
            };

            result.AdditionalData.Add(AdditionalVerificationDataKey, new SamanAdditionalVerificationData
            {
                Cid       = callbackResult.Cid,
                TraceNo   = callbackResult.TraceNo,
                SecurePan = callbackResult.SecurePan,
                Rrn       = callbackResult.Rrn
            });

            return(result);
        }
Пример #2
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));
        }
Пример #3
0
        public static PaymentRefundResult CreateRefundResult(string webServiceResponse, MessagesOptions messagesOptions)
        {
            var result = XmlHelper.GetNodeValueFromXml(webServiceResponse, "result");

            var integerResult = Convert.ToInt32(result);

            var isSucceed = integerResult > 0;

            var message = SamanResultTranslator.Translate(integerResult, messagesOptions);

            return(new PaymentRefundResult
            {
                IsSucceed = isSucceed,
                Message = message
            });
        }
Пример #4
0
        private static async Task <PaymentRequestResult> CreateWebPaymentRequest(
            Invoice invoice,
            HttpContext httpContext,
            SamanGatewayAccount account,
            HttpClient httpClient,
            SamanGatewayOptions gatewayOptions,
            MessagesOptions messagesOptions,
            CancellationToken cancellationToken)
        {
            var data = CreateTokenRequest(invoice, account);

            var responseMessage = await httpClient.PostXmlAsync(gatewayOptions.WebApiTokenUrl, data, cancellationToken);

            var response = await responseMessage.Content.ReadAsStringAsync();

            var token = XmlHelper.GetNodeValueFromXml(response, "result");

            string message   = null;
            var    isSucceed = true;

            if (token.IsNullOrEmpty())
            {
                message   = $"{messagesOptions.InvalidDataReceivedFromGateway} Token is null or empty.";
                isSucceed = false;
            }
            else if (long.TryParse(token, out var longToken) && longToken < 0)
            {
                message   = SamanResultTranslator.Translate(longToken, messagesOptions);
                isSucceed = false;
            }

            if (!isSucceed)
            {
                return(PaymentRequestResult.Failed(message, account.Name));
            }

            return(PaymentRequestResult.SucceedWithPost(
                       account.Name,
                       httpContext,
                       gatewayOptions.WebPaymentPageUrl,
                       new Dictionary <string, string>
            {
                { "Token", token },
                { "RedirectURL", invoice.CallbackUrl }
            }));
        }
Пример #5
0
        public static PaymentVerifyResult CreateVerifyResult(string webServiceResponse, InvoiceContext context, SamanCallbackResult callbackResult, MessagesOptions messagesOptions)
        {
            var result = XmlHelper.GetNodeValueFromXml(webServiceResponse, "result");

            //  This result is actually: TotalAmount
            //  it must be equals to TotalAmount in database.
            var numericResult = Convert.ToInt64(result);

            var isSuccess = numericResult > 0 && numericResult == (long)context.Payment.Amount;

            var message = isSuccess
                ? messagesOptions.PaymentSucceed
                : SamanResultTranslator.Translate(numericResult, messagesOptions);

            return(new PaymentVerifyResult
            {
                IsSucceed = isSuccess,
                TransactionCode = callbackResult.TransactionId,
                Message = message
            });
        }
Пример #6
0
        public override async Task <RefundResult> RefundAsync(GatewayRefundPaymentContext refundPaymentContext)
        {
            string reverseXml = CreateReverseWebServiceXml(
                SamanConfiguration.MerchantId,
                SamanConfiguration.Password,
                refundPaymentContext.TransactionId,
                refundPaymentContext.Amount);

            var result = await WebHelper.SendXmlWebRequestAsync(WebServiceUrl, reverseXml);

            result = XmlHelper.GetNodeValueFromXml(result, "result");

            int integerResult = Convert.ToInt32(result);

            IGatewayResultTranslator gatewayResultTranslator = new SamanResultTranslator();

            var translatedMessage = gatewayResultTranslator.Translate(integerResult);

            var isSuccess = integerResult > 0;

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

            return(new RefundResult(Gateway.Saman, refundPaymentContext.Amount, status, translatedMessage));
        }