81d139cdab
Build and Deploy to Kubernetes / build-and-deploy (push) Failing after 27m33s
- Updated references to `jsRuntime` to `JSRuntime` for consistency across the ChargeCreditWallet component. - Improved the clarity of the code by ensuring uniform naming conventions in the handling of return URLs. These changes enhance code readability and maintainability in the ChargeCreditWallet functionality.
99 lines
3.1 KiB
C#
99 lines
3.1 KiB
C#
using FrontOffice.Main.Utilities;
|
|
using Microsoft.AspNetCore.Components;
|
|
using Microsoft.JSInterop;
|
|
using MudBlazor;
|
|
|
|
namespace FrontOffice.Main.Pages.Profile;
|
|
|
|
public partial class ChargeCreditWallet : ComponentBase
|
|
{
|
|
private bool _isProcessing;
|
|
private long _chargeAmount;
|
|
private string? _paymentResult;
|
|
private string? _pendingReturnUrl;
|
|
|
|
private readonly long[] _presetAmounts = { 500_000, 1_000_000, 5_000_000, 10_000_000, 20_000_000, 50_000_000 };
|
|
|
|
[SupplyParameterFromQuery(Name = "payment")]
|
|
public string? PaymentQueryParam { get; set; }
|
|
|
|
[SupplyParameterFromQuery(Name = "amount")]
|
|
public long? AmountQueryParam { get; set; }
|
|
|
|
[SupplyParameterFromQuery(Name = "returnUrl")]
|
|
public string? ReturnUrlQueryParam { get; set; }
|
|
|
|
protected override void OnInitialized()
|
|
{
|
|
_paymentResult = PaymentQueryParam;
|
|
|
|
if (AmountQueryParam is > 0)
|
|
_chargeAmount = CreditChargeNavigation.NormalizeChargeAmount(AmountQueryParam.Value);
|
|
|
|
if (CreditChargeNavigation.IsValidReturnUrl(ReturnUrlQueryParam))
|
|
_pendingReturnUrl = ReturnUrlQueryParam;
|
|
}
|
|
|
|
protected override async Task OnAfterRenderAsync(bool firstRender)
|
|
{
|
|
if (firstRender && !string.IsNullOrEmpty(_pendingReturnUrl))
|
|
{
|
|
await CreditChargeNavigation.SaveReturnUrlAsync(JSRuntime, _pendingReturnUrl);
|
|
}
|
|
|
|
await base.OnAfterRenderAsync(firstRender);
|
|
}
|
|
|
|
private async Task StartCreditCharge()
|
|
{
|
|
if (_chargeAmount <= 0 || _isProcessing) return;
|
|
|
|
_isProcessing = true;
|
|
StateHasChanged();
|
|
|
|
try
|
|
{
|
|
if (!string.IsNullOrEmpty(_pendingReturnUrl))
|
|
await CreditChargeNavigation.SaveReturnUrlAsync(JSRuntime, _pendingReturnUrl);
|
|
else
|
|
{
|
|
var storedReturnUrl = await CreditChargeNavigation.GetReturnUrlAsync(JSRuntime);
|
|
if (CreditChargeNavigation.IsValidReturnUrl(storedReturnUrl))
|
|
_pendingReturnUrl = storedReturnUrl;
|
|
}
|
|
|
|
var (success, gatewayUrl, error) = await WalletService.InitiateCreditChargeAsync(_chargeAmount);
|
|
|
|
if (success && !string.IsNullOrEmpty(gatewayUrl))
|
|
{
|
|
Navigation.NavigateTo(gatewayUrl, forceLoad: true);
|
|
}
|
|
else
|
|
{
|
|
Snackbar.Add(error ?? "خطا در ایجاد درخواست پرداخت", Severity.Error);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Snackbar.Add($"خطا: {ex.Message}", Severity.Error);
|
|
}
|
|
finally
|
|
{
|
|
_isProcessing = false;
|
|
StateHasChanged();
|
|
}
|
|
}
|
|
|
|
private async Task ContinueShoppingAsync()
|
|
{
|
|
var returnUrl = await CreditChargeNavigation.GetReturnUrlAsync(JSRuntime);
|
|
await CreditChargeNavigation.ClearReturnUrlAsync(JSRuntime);
|
|
|
|
if (CreditChargeNavigation.IsValidReturnUrl(returnUrl))
|
|
Navigation.NavigateTo(returnUrl!);
|
|
}
|
|
|
|
private static string FormatToman(long toman)
|
|
=> string.Format("{0:N0} تومان", toman);
|
|
}
|