Example #1
0
        public virtual async Task <VerifyPaymentResult> VerifyPayment(TblInvoices invoice)
        {
            var settings = await _settingService.LoadSettingAsync <ZarinPalSettingsModel>();

            var currentCurrency = DependencyResolver.Current.GetService <IWorkContext>().CurrentCurrency;
            var amount          = invoice.ComputeInvoiceTotalAmount();

            if (string.Compare(currentCurrency.IsoCode, "irr", StringComparison.OrdinalIgnoreCase) == 0)
            {
                amount = amount / 10;
            }

            var result = new VerifyPaymentResult();
            var token  = invoice.PaymentGatewayToken;

            var request = HttpContext.Current.Request;

            if (string.IsNullOrWhiteSpace(request.QueryString["Status"]) ||
                string.IsNullOrWhiteSpace(request.QueryString["Authority"]))
            {
                result.ErrorMessage = _localizationService.GetResource("Plugin.PaymentMethod.Zarinpal.StatusOrAuthorityInvalid");
                return(result);
            }
            if (!request.QueryString["Status"].Equals("OK"))
            {
                result.ErrorMessage = _localizationService.GetResource("Plugin.PaymentMethod.Zarinpal.StatusFieldIsNotOK");
                return(result);
            }

            var  zResult         = 0;
            long refId           = 0;
            var  connectionError = false;
            await Task.Run(() =>
            {
                try
                {
                    using (var zarinpal = new com.zarinpal.www.PaymentGatewayImplementationService()
                    {
                        Url = settings.ZarinpalWebserviceUrl
                    })
                    {
                        zResult = zarinpal.PaymentVerification(settings.MerchantId,
                                                               token,
                                                               (int)amount,
                                                               out refId);
                    }
                }
                catch
                {
                    connectionError = true;
                }
            });

            if (zResult == 100)
            {
                result.IsSuccess     = true;
                result.TransactionId = refId.ToString();
            }
            else
            {
                result.ErrorMessage = connectionError ?
                                      _localizationService.GetResource("Plugin.PaymentMethod.Zarinpal.ServiceUnavailable") :
                                      $"[{zResult}] : {GetErrorDes(zResult)}";
            }

            return(result);
        }
Example #2
0
        public virtual async Task <PaymentRequestResult> RequestForPaymentUrl(string callbackUrl, TblInvoices invoice)
        {
            var settings = await _settingService.LoadSettingAsync <ZarinPalSettingsModel>();

            var currentCurrency = DependencyResolver.Current.GetService <IWorkContext>().CurrentCurrency;
            var amount          = invoice.ComputeInvoiceTotalAmount();

            if (string.Compare(currentCurrency.IsoCode, "irr", StringComparison.OrdinalIgnoreCase) == 0)
            {
                amount = amount / 10;
            }
            var buyerEmail       = "";
            var buyerPhoneNumber = "";
            var paymentDesc      = string.Format(_localizationService.GetResource("Plugin.PaymentMethod.Zarinpal.InvoiceNumber"), invoice.Id.ToString("N").ToUpper());

            if (invoice.User != null)
            {
                buyerEmail       = invoice.User.Email;
                buyerPhoneNumber = invoice.User.PhoneNumber;
            }

            if (string.IsNullOrWhiteSpace(settings.MerchantId))
            {
                return(new PaymentRequestResult()
                {
                    ErrorMessage = _localizationService.GetResource("Plugin.PaymentMethod.Zarinpal.MerchantCodeIsInvalid")
                });
            }

            var result          = new PaymentRequestResult();
            var zResult         = 0;
            var authority       = "";
            var connectionError = false;
            await Task.Run(() =>
            {
                try
                {
                    using (var zarinpal = new com.zarinpal.www.PaymentGatewayImplementationService()
                    {
                        Url = settings.ZarinpalWebserviceUrl
                    })
                    {
                        zResult = zarinpal.PaymentRequest(settings.MerchantId,
                                                          (int)amount,
                                                          paymentDesc,
                                                          buyerEmail,
                                                          buyerPhoneNumber,
                                                          callbackUrl,
                                                          out authority);
                    }
                }
                catch
                {
                    connectionError = true;
                }
            });

            if (zResult == 100)
            {
                result.RedirectUrl = string.Format(settings.ZarinpalPaymentPageUrl, authority);
                result.Token       = authority;
                result.IsSuccess   = true;
            }
            else
            {
                result.ErrorMessage = connectionError ?
                                      _localizationService.GetResource("Plugin.PaymentMethod.Zarinpal.ServiceUnavailable") :
                                      $"[{zResult}] : {GetErrorDes(zResult)}";
            }

            return(result);
        }