示例#1
0
        public static async Task <SamanCallbackResult> CreateCallbackResultAsync(
            HttpRequest httpRequest,
            MessagesOptions messagesOptions,
            CancellationToken cancellationToken)
        {
            var          isSuccess     = false;
            string       message       = null;
            StringValues referenceId   = "";
            StringValues transactionId = "";

            var securePan = await httpRequest.TryGetParamAsync("SecurePan", cancellationToken).ConfigureAwaitFalse();

            var cid = await httpRequest.TryGetParamAsync("CID", cancellationToken).ConfigureAwaitFalse();

            var traceNo = await httpRequest.TryGetParamAsync("TraceNo", cancellationToken).ConfigureAwaitFalse();

            var rrn = await httpRequest.TryGetParamAsync("RRN", cancellationToken).ConfigureAwaitFalse();

            var state = await httpRequest.TryGetParamAsync("state", cancellationToken).ConfigureAwaitFalse();

            if (!state.Exists || state.Value.IsNullOrEmpty())
            {
                message = messagesOptions.InvalidDataReceivedFromGateway;
            }
            else
            {
                var referenceIdResult = await httpRequest.TryGetParamAsync("ResNum", cancellationToken).ConfigureAwaitFalse();

                if (referenceIdResult.Exists)
                {
                    referenceId = referenceIdResult.Value;
                }

                var transactionIdResult = await httpRequest.TryGetParamAsync("RefNum", cancellationToken).ConfigureAwaitFalse();

                if (transactionIdResult.Exists)
                {
                    transactionId = transactionIdResult.Value;
                }

                isSuccess = state.Value.Equals("OK", StringComparison.OrdinalIgnoreCase);

                if (!isSuccess)
                {
                    message = SamanStateTranslator.Translate(state.Value, messagesOptions);
                }
            }

            return(new SamanCallbackResult
            {
                IsSucceed = isSuccess,
                ReferenceId = referenceId,
                TransactionId = transactionId,
                SecurePan = securePan.Value,
                Cid = cid.Value,
                TraceNo = traceNo.Value,
                Rrn = rrn.Value,
                Message = message
            });
        }
示例#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 async Task <SamanCallbackResult> CreateCallbackResultAsync(
            HttpRequest httpRequest,
            MessagesOptions messagesOptions,
            CancellationToken cancellationToken)
        {
            var isSuccess = false;
            PaymentVerifyResult verifyResult = null;
            StringValues        referenceId;
            StringValues        transactionId;

            var state = await httpRequest.TryGetParamAsync("state", cancellationToken).ConfigureAwaitFalse();

            if (!state.Exists || state.Value.IsNullOrEmpty())
            {
                verifyResult = PaymentVerifyResult.Failed(messagesOptions.InvalidDataReceivedFromGateway);
            }
            else
            {
                var referenceIdResult = await httpRequest.TryGetParamAsync("ResNum", cancellationToken).ConfigureAwaitFalse();

                if (referenceIdResult.Exists)
                {
                    referenceId = referenceIdResult.Value;
                }

                var transactionIdResult = await httpRequest.TryGetParamAsync("RefNum", cancellationToken).ConfigureAwaitFalse();

                if (transactionIdResult.Exists)
                {
                    transactionId = transactionIdResult.Value;
                }

                isSuccess = state.Value.Equals("OK", StringComparison.OrdinalIgnoreCase);

                if (!isSuccess)
                {
                    var message = SamanStateTranslator.Translate(state.Value, messagesOptions);

                    verifyResult = PaymentVerifyResult.Failed(message);
                }
            }

            return(new SamanCallbackResult
            {
                IsSucceed = isSuccess,
                ReferenceId = referenceId,
                TransactionId = transactionId,
                Result = verifyResult
            });
        }
示例#4
0
        public static SamanCallbackResult CreateCallbackResult(HttpRequest httpRequest, MessagesOptions messagesOptions)
        {
            var isSuccess = false;
            PaymentVerifyResult verifyResult = null;
            StringValues        referenceId;
            StringValues        transactionId;

            httpRequest.TryGetParam("state", out var state);

            if (state.IsNullOrEmpty())
            {
                verifyResult = PaymentVerifyResult.Failed(messagesOptions.InvalidDataReceivedFromGateway);
            }
            else
            {
                httpRequest.TryGetParam("ResNum", out referenceId);

                httpRequest.TryGetParam("RefNum", out transactionId);

                isSuccess = state.Equals("OK", StringComparison.OrdinalIgnoreCase);

                if (!isSuccess)
                {
                    var message = SamanStateTranslator.Translate(state, messagesOptions);

                    verifyResult = PaymentVerifyResult.Failed(message);
                }
            }

            return(new SamanCallbackResult
            {
                IsSucceed = isSuccess,
                ReferenceId = referenceId,
                TransactionId = transactionId,
                Result = verifyResult
            });
        }