예제 #1
0
        public static async Task <PaymentRequestResult> CreateRequestResult(
            HttpResponseMessage responseMessage,
            HttpContext httpContext,
            ZibalGatewayAccount account,
            ZibalGatewayOptions gatewayOptions,
            MessagesOptions messagesOptions)
        {
            var message = await responseMessage.Content.ReadAsStringAsync();

            var response = JsonConvert.DeserializeObject <ZibalResponseModel>(message);

            if (response == null)
            {
                return(PaymentRequestResult.Failed(messagesOptions.InvalidDataReceivedFromGateway, account.Name));
            }

            if (response.Result != SuccessCode)
            {
                var failureMessage = ZibalTranslator.TranslateResult(response.Result) ?? response.Message ?? messagesOptions.PaymentFailed;

                return(PaymentRequestResult.Failed(failureMessage, account.Name, response.Result.ToString()));
            }

            var paymentPageUrl = string.IsNullOrEmpty(response.PayLink)
                                ? GetPaymentPageUrl(gatewayOptions.PaymentPageUrl, response.TrackId)
                                : response.PayLink;

            var result = PaymentRequestResult.SucceedWithRedirect(account.Name, httpContext, paymentPageUrl);

            result.DatabaseAdditionalData.Add(TrackIdAdditionalDataKey, response.TrackId.ToString());

            return(result);
        }
예제 #2
0
        public static ZibalPaymentVerifyModel CreateVerifyData(
            IEnumerable <Transaction> transactions,
            ZibalGatewayAccount account)
        {
            var trackId = GetTrackId(transactions);

            return(new ZibalPaymentVerifyModel
            {
                Merchant = account.Merchant,
                TrackId = trackId
            });
        }
예제 #3
0
        public static object CreateRequestData(Invoice invoice, ZibalGatewayAccount account)
        {
            var requestAdditionalData = invoice.GetZibalRequestData();

            return(new ZibalPaymentRequestModel
            {
                //if Merchant value is 'zibal' , Gateway mode is sandBox
                Merchant = account.IsSandbox ? "zibal" : account.Merchant,
                Amount = invoice.Amount,
                Mobile = requestAdditionalData?.MobileNumber,
                OrderId = invoice.TrackingNumber.ToString(),
                CallbackUrl = invoice.CallbackUrl,
                Description = requestAdditionalData?.Description,
                FeeMode = requestAdditionalData?.FeeMode,
                Sms = requestAdditionalData?.SendPaymentLinkViaSms,
                AllowedCards = requestAdditionalData?.AllowedCards
            });
        }
예제 #4
0
        public static ZibalRequestModel CreateRequestData(Invoice invoice, ZibalGatewayAccount account)
        {
            var request = invoice.GetZibalRequest();

            if (request == null)
            {
                throw new Exception("ZibalRequest object not found. Make sure that you are using the UseZibal method.");
            }

            return(new ZibalRequestModel()
            {
                //if Merchant value is 'zibal' , Gateway mode is sandBox
                Merchant = account.IsSandBox ? "zibal" : account.Merchant,
                Amount = invoice.Amount,
                CustomerMobile = request.CustomerMobile,
                OrderId = invoice.TrackingNumber.ToString(),
                CallBackUrl = invoice.CallbackUrl,
                Description = request.Description,
                FeeMode = request.FeeMode,
                SendSms = request.SendSms,
                AllowedCards = request.AllowedCards
            });
        }
예제 #5
0
        public static ZibalVerifyRequestModel CreateVerifyData(
            IEnumerable <Transaction> transactions,
            ZibalGatewayAccount account)
        {
            var transactionRecord = transactions.SingleOrDefault(transaction => transaction.Type == TransactionType.Request);

            if (transactionRecord == null)
            {
                throw new Exception("Cannot find any transaction with the type \"Request\"");
            }

            var additionalData = JsonConvert.DeserializeObject <IDictionary <string, string> >(transactionRecord.AdditionalData);

            if (!additionalData.ContainsKey(TrackIdAdditionalDataKey))
            {
                throw new Exception("Cannot find the TrackId.");
            }

            return(new ZibalVerifyRequestModel
            {
                Merchant = account.Merchant,
                TrackId = additionalData[TrackIdAdditionalDataKey]
            });
        }