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); }
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); }