コード例 #1
0
        public static async Task <IdPayCallbackResult> CreateCallbackResultAsync(
            InvoiceContext context,
            HttpRequest httpRequest,
            MessagesOptions messagesOptions,
            CancellationToken cancellationToken)
        {
            var status = await httpRequest.TryGetParamAsync("status", cancellationToken).ConfigureAwaitFalse();

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

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

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

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

            var(isSucceed, message) = CheckCallback(status.Value, orderId.Value, id.Value, trackId.Value, amount.Value, context, messagesOptions);

            IPaymentVerifyResult verifyResult = null;

            if (!isSucceed)
            {
                verifyResult = PaymentVerifyResult.Failed(message);
            }

            return(new IdPayCallbackResult
            {
                Id = id.Value,
                IsSucceed = isSucceed,
                Result = verifyResult
            });
        }
コード例 #2
0
        public static async Task <ZarinPalCallbackResult> CreateCallbackResultAsync(HttpRequest httpRequest,
                                                                                    CancellationToken cancellationToken)
        {
            var authority = await httpRequest.TryGetParamAsync("Authority", cancellationToken).ConfigureAwaitFalse();

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

            IPaymentVerifyResult verifyResult = null;

            var isSucceed = status.Exists && string.Equals(status.Value, StringOkResult, StringComparison.InvariantCultureIgnoreCase);

            if (!isSucceed)
            {
                var message = $"Error {status}";

                verifyResult = PaymentVerifyResult.Failed(message);
            }

            return(new ZarinPalCallbackResult
            {
                Authority = authority.Value,
                IsSucceed = isSucceed,
                Result = verifyResult
            });
        }
コード例 #3
0
        public static void OnVerifyResult(
            IPaymentVerifyResult result,
            long expectedTrackingNumber,
            decimal expectedAmount,
            string expectedGatewayName,
            string expectedTransactionCode = null)
        {
            Assert.IsNotNull(result);

            AssertFailWhenResultIsNotSucceed(result);
            Assert.IsTrue(result.IsSucceed);
            Assert.AreEqual(PaymentVerifyResultStatus.Succeed, result.Status);

            Assert.AreEqual(expectedTrackingNumber, result.TrackingNumber);

            Assert.AreEqual(expectedGatewayName, result.GatewayName);

            Assert.AreEqual(GatewayAccount.DefaultName, result.GatewayAccountName);

            Assert.AreEqual(result.Amount, expectedAmount);

            Assert.IsNotNull(result.TransactionCode);

            if (!string.IsNullOrEmpty(expectedTransactionCode))
            {
                Assert.AreEqual(expectedTransactionCode, result.TransactionCode);
            }
        }
コード例 #4
0
        public static PayIrVerifyAdditionalData GetPayIrAdditionalData(this IPaymentVerifyResult result)
        {
            if (result == null)
            {
                throw new ArgumentNullException(nameof(result));
            }

            result.AdditionalData.TryGetValue(AdditionalDataKey, out var additionalData);

            return(additionalData as PayIrVerifyAdditionalData);
        }
コード例 #5
0
        internal static void SetPayIrAdditionalData(this IPaymentVerifyResult result, SepehrGatewayVerificationAdditionalData additionalData)
        {
            if (result == null)
            {
                throw new ArgumentNullException(nameof(result));
            }
            if (additionalData == null)
            {
                throw new ArgumentNullException(nameof(additionalData));
            }

            result.AdditionalData.Add(SepehrHelper.VerificationAdditionalDataKey, additionalData);
        }
コード例 #6
0
        internal static void SetPayIrAdditionalData(this IPaymentVerifyResult result, PayIrVerifyAdditionalData additionalData)
        {
            if (result == null)
            {
                throw new ArgumentNullException(nameof(result));
            }
            if (additionalData == null)
            {
                throw new ArgumentNullException(nameof(additionalData));
            }

            result.AdditionalData.Add(AdditionalDataKey, additionalData);
        }
コード例 #7
0
        /// <summary>
        /// Refunds completely the paid payment.
        /// </summary>
        /// <param name="onlinePayment"></param>
        /// <param name="verifyResult"></param>
        /// <param name="cancellationToken"></param>
        public static Task <IPaymentRefundResult> RefundCompletelyAsync(
            this IOnlinePayment onlinePayment,
            IPaymentVerifyResult verifyResult,
            CancellationToken cancellationToken = default)
        {
            if (onlinePayment == null)
            {
                throw new ArgumentNullException(nameof(onlinePayment));
            }
            if (verifyResult == null)
            {
                throw new ArgumentNullException(nameof(verifyResult));
            }

            return(onlinePayment.RefundAsync(new RefundInvoice(verifyResult.TrackingNumber), cancellationToken));
        }
コード例 #8
0
        public static PayIrCallbackResult CreateCallbackResult(HttpRequest httpRequest)
        {
            httpRequest.TryGetParam("Token", out var token);
            httpRequest.TryGetParam("Status", out var status);

            IPaymentVerifyResult verifyResult = null;

            var isSucceed = string.Equals(status, OkResult, StringComparison.InvariantCultureIgnoreCase);

            if (!isSucceed)
            {
                var message = $"Error {status}";

                verifyResult = PaymentVerifyResult.Failed(message);
            }

            return(new PayIrCallbackResult
            {
                Token = token,
                IsSucceed = isSucceed,
                Result = verifyResult
            });
        }
コード例 #9
0
        public static IdPayCallbackResult CreateCallbackResult(InvoiceContext context, HttpRequest httpRequest, MessagesOptions messagesOptions)
        {
            httpRequest.TryGetParam("status", out var status);
            httpRequest.TryGetParam("id", out var id);
            httpRequest.TryGetParam("track_id", out var trackId);
            httpRequest.TryGetParam("order_id", out var orderId);
            httpRequest.TryGetParam("amount", out var amount);

            var(isSucceed, message) = CheckCallback(status, orderId, id, trackId, amount, context, messagesOptions);

            IPaymentVerifyResult verifyResult = null;

            if (!isSucceed)
            {
                verifyResult = PaymentVerifyResult.Failed(message);
            }

            return(new IdPayCallbackResult
            {
                Id = id,
                IsSucceed = isSucceed,
                Result = verifyResult
            });
        }
コード例 #10
0
        /// <summary>
        /// Refunds completely the paid payment.
        /// </summary>
        /// <param name="onlinePayment"></param>
        /// <param name="verifyResult"></param>
        public static IPaymentRefundResult RefundCompletely(this IOnlinePayment onlinePayment, IPaymentVerifyResult verifyResult)
        {
            if (onlinePayment == null)
            {
                throw new ArgumentNullException(nameof(onlinePayment));
            }
            if (verifyResult == null)
            {
                throw new ArgumentNullException(nameof(verifyResult));
            }

            return(onlinePayment.Refund(new RefundInvoice(verifyResult.TrackingNumber)));
        }
コード例 #11
0
ファイル: SepehrHelper.cs プロジェクト: productivesys/Parbad
        public static async Task <CallbackResultModel> CreateCallbackResultAsync(
            InvoiceContext context,
            HttpRequest httpRequest,
            SepehrGatewayAccount account,
            MessagesOptions messages,
            CancellationToken cancellationToken)
        {
            var respCodeParam = await httpRequest.TryGetParamAsync("respcode", cancellationToken).ConfigureAwaitFalse();

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

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

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

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

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

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

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

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

            bool isSucceed;
            IPaymentVerifyResult verifyResult = null;
            long traceNumber = 0;
            long rrn         = 0;

            if (!respCodeParam.Exists)
            {
                verifyResult = PaymentVerifyResult.Failed(messages.InvalidDataReceivedFromGateway);
                isSucceed    = false;
            }
            else
            {
                if (!int.TryParse(respCodeParam.Value, out var responseCode))
                {
                    verifyResult = PaymentVerifyResult.Failed(messages.InvalidDataReceivedFromGateway);
                    isSucceed    = false;
                }
                else if (responseCode != 0)
                {
                    var message = respMsgParam.Exists ? (string)respMsgParam.Value : messages.PaymentFailed;
                    verifyResult = PaymentVerifyResult.Failed(message);
                    isSucceed    = false;
                }
                else
                {
                    var isValid = true;
                    var message = messages.InvalidDataReceivedFromGateway;

                    if (!invoiceIdParam.Exists || !string.Equals(invoiceIdParam.Value, context.Payment.TrackingNumber.ToString(), StringComparison.InvariantCultureIgnoreCase))
                    {
                        isValid  = false;
                        message += " InvoiceID is not valid.";
                    }

                    if (!terminalIdParam.Exists || !string.Equals(terminalIdParam.Value, account.TerminalId.ToString(), StringComparison.InvariantCultureIgnoreCase))
                    {
                        isValid  = false;
                        message += " TerminalID is not valid.";
                    }

                    if (!amountParam.Exists || !string.Equals(amountParam.Value, ((long)context.Payment.Amount).ToString(), StringComparison.InvariantCultureIgnoreCase))
                    {
                        isValid  = false;
                        message += " Amount is not valid.";
                    }

                    if (!traceNumberParam.Exists)
                    {
                        isValid  = false;
                        message += " TraceNumber doesn't exist.";
                    }
                    else
                    {
                        traceNumber = long.Parse(traceNumberParam.Value);
                    }

                    if (!rrnParam.Exists)
                    {
                        isValid  = false;
                        message += " RRN doesn't exist.";
                    }
                    else
                    {
                        rrn = long.Parse(rrnParam.Value);
                    }

                    if (!digitalReceiptParam.Exists)
                    {
                        isValid  = false;
                        message += " DigitalReceipt doesn't exist.";
                    }

                    if (!isValid)
                    {
                        verifyResult = PaymentVerifyResult.Failed(message);
                    }

                    isSucceed = isValid;
                }
            }

            return(new CallbackResultModel
            {
                IsSucceed = isSucceed,
                Result = verifyResult,
                TraceNumber = traceNumber,
                Rrn = rrn,
                DigitalReceipt = digitalReceiptParam.Value,
                CardNumber = cardNumberParam.Value
            });
        }
コード例 #12
0
        /// <summary>
        /// Gets the verification additional data from Sepehr gateway.
        /// </summary>
        public static SepehrGatewayVerificationAdditionalData GetSepehrAdditionalData(this IPaymentVerifyResult result)
        {
            if (result == null)
            {
                throw new ArgumentNullException(nameof(result));
            }

            result.AdditionalData.TryGetValue(SepehrHelper.VerificationAdditionalDataKey, out var additionalData);

            return(additionalData as SepehrGatewayVerificationAdditionalData);
        }