feat(wallet): add credit wallet charge functionality and update payment callback
Build and Deploy to Kubernetes / build-and-deploy (push) Has been cancelled
Build and Deploy to Kubernetes / build-and-deploy (push) Has been cancelled
- Introduced methods for initiating and verifying credit wallet charges in the WalletService. - Updated PaymentCallback.razor to handle credit wallet charge verification. - Added a button for charging the credit wallet in Wallet.razor. - Updated route constants to include the new credit wallet charge route. These changes enhance the wallet functionality by allowing users to charge their credit wallets and verify transactions seamlessly.
This commit is contained in:
@@ -67,10 +67,12 @@
|
|||||||
| 4.5 | `WalletService.VerifyMagicChargeAsync` | `UserWalletContract.VerifyMagicCharge` | `/profile/payment-callback?type=magic-wallet` | تأیید شارژ Magic پس از درگاه |
|
| 4.5 | `WalletService.VerifyMagicChargeAsync` | `UserWalletContract.VerifyMagicCharge` | `/profile/payment-callback?type=magic-wallet` | تأیید شارژ Magic پس از درگاه |
|
||||||
| 4.6 | `WalletService.InitiateDiscountChargeAsync` | `UserWalletContract.InitiateDiscountCharge` | `/profile/charge-discount-wallet` | شروع شارژ کیف پول تخفیفی → درگاه |
|
| 4.6 | `WalletService.InitiateDiscountChargeAsync` | `UserWalletContract.InitiateDiscountCharge` | `/profile/charge-discount-wallet` | شروع شارژ کیف پول تخفیفی → درگاه |
|
||||||
| 4.7 | `WalletService.VerifyDiscountChargeAsync` | `UserWalletContract.VerifyDiscountCharge` | `/profile/payment-callback?type=discount-wallet` | تأیید شارژ کیف تخفیفی |
|
| 4.7 | `WalletService.VerifyDiscountChargeAsync` | `UserWalletContract.VerifyDiscountCharge` | `/profile/payment-callback?type=discount-wallet` | تأیید شارژ کیف تخفیفی |
|
||||||
| 4.8 | `WalletService.GetWithdrawalsAsync` | `UserWalletContract.GetCustomerWithdrawals` | `/profile/withdrawal-requests` | لیست درخواستهای برداشت |
|
| 4.8 | `WalletService.InitiateCreditChargeAsync` | `UserWalletContract.InitiateCreditCharge` | `/profile/charge-credit-wallet` | شروع شارژ کیف پول اصلی → درگاه |
|
||||||
| 4.9 | `WalletService.GetWithdrawalSettingsAsync` | `UserWalletContract.GetCustomerWithdrawalSettings` | `/profile/withdrawal-requests` | حداقل مبلغ برداشت |
|
| 4.9 | `WalletService.VerifyCreditChargeAsync` | `UserWalletContract.VerifyCreditCharge` | `/profile/payment-callback?type=credit-wallet` | تأیید شارژ کیف اصلی |
|
||||||
| 4.10 | `WalletService.RequestWithdrawalAsync` | `UserWalletContract.CustomerWithdrawBalance` | `/profile/withdrawal-requests` | ثبت درخواست برداشت پاداش (با payoutId کمیسیون) |
|
| 4.10 | `WalletService.GetWithdrawalsAsync` | `UserWalletContract.GetCustomerWithdrawals` | `/profile/withdrawal-requests` | لیست درخواستهای برداشت |
|
||||||
| 4.11 | `CommissionService.GetWithdrawablePayoutsAsync` | `CommissionContract.GetMyCommissionPayouts` | `/profile/withdrawal-requests` | پاداشهای قابل برداشت برای انتخاب |
|
| 4.11 | `WalletService.GetWithdrawalSettingsAsync` | `UserWalletContract.GetCustomerWithdrawalSettings` | `/profile/withdrawal-requests` | حداقل مبلغ برداشت |
|
||||||
|
| 4.12 | `WalletService.RequestWithdrawalAsync` | `UserWalletContract.CustomerWithdrawBalance` | `/profile/withdrawal-requests` | ثبت درخواست برداشت پاداش (با payoutId کمیسیون) |
|
||||||
|
| 4.13 | `CommissionService.GetWithdrawablePayoutsAsync` | `CommissionContract.GetMyCommissionPayouts` | `/profile/withdrawal-requests` | پاداشهای قابل برداشت برای انتخاب |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -81,8 +83,9 @@
|
|||||||
| 5.1 | `PackageContract.CustomerVerifyPackagePurchase` | `PackageContract` | `/profile/payment-callback` (type=package) | تأیید خرید پکیج |
|
| 5.1 | `PackageContract.CustomerVerifyPackagePurchase` | `PackageContract` | `/profile/payment-callback` (type=package) | تأیید خرید پکیج |
|
||||||
| 5.2 | `WalletService.VerifyMagicChargeAsync` | `UserWalletContract` | `/profile/payment-callback` (type=magic-wallet) | تأیید شارژ Magic |
|
| 5.2 | `WalletService.VerifyMagicChargeAsync` | `UserWalletContract` | `/profile/payment-callback` (type=magic-wallet) | تأیید شارژ Magic |
|
||||||
| 5.3 | `WalletService.VerifyDiscountChargeAsync` | `UserWalletContract` | `/profile/payment-callback` (type=discount-wallet) | تأیید شارژ تخفیفی |
|
| 5.3 | `WalletService.VerifyDiscountChargeAsync` | `UserWalletContract` | `/profile/payment-callback` (type=discount-wallet) | تأیید شارژ تخفیفی |
|
||||||
| 5.4 | `DiscountOrderService.VerifyDiscountOrderPaymentAsync` | `DiscountOrderContract.CustomerVerifyDiscountOrderPayment` | `/profile/payment-callback` (type=discount-order) | تأیید پرداخت سفارش فروشگاه تخفیفی |
|
| 5.4 | `WalletService.VerifyCreditChargeAsync` | `UserWalletContract` | `/profile/payment-callback` (type=credit-wallet) | تأیید شارژ کیف اصلی |
|
||||||
| 5.5 | `UserContract.GetUserForCustomer` + `AuthService.InitUserAuthInfo` | `UserContract` | `/profile/payment-callback` | بهروزرسانی claims کاربر پس از پرداخت موفق |
|
| 5.5 | `DiscountOrderService.VerifyDiscountOrderPaymentAsync` | `DiscountOrderContract.CustomerVerifyDiscountOrderPayment` | `/profile/payment-callback` (type=discount-order) | تأیید پرداخت سفارش فروشگاه تخفیفی |
|
||||||
|
| 5.6 | `UserContract.GetUserForCustomer` + `AuthService.InitUserAuthInfo` | `UserContract` | `/profile/payment-callback` | بهروزرسانی claims کاربر پس از پرداخت موفق |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="DateTimeConverterCL" Version="1.0.0" />
|
<PackageReference Include="DateTimeConverterCL" Version="1.0.0" />
|
||||||
<!-- Replace all FrontOffice.BFF protobuf packages with CMS protobuf -->
|
<!-- Replace all FrontOffice.BFF protobuf packages with CMS protobuf -->
|
||||||
<PackageReference Include="Foursat.CMSMicroservice.Protobuf" Version="0.0.199" />
|
<PackageReference Include="Foursat.CMSMicroservice.Protobuf" Version="0.0.202" />
|
||||||
<!-- <ProjectReference Include="../../../CMS/src/CMSMicroservice.Protobuf/CMSMicroservice.Protobuf.csproj" />-->
|
<!-- <ProjectReference Include="../../../CMS/src/CMSMicroservice.Protobuf/CMSMicroservice.Protobuf.csproj" />-->
|
||||||
<PackageReference Include="MudBlazor" Version="8.14.0" />
|
<PackageReference Include="MudBlazor" Version="8.14.0" />
|
||||||
<PackageReference Include="Blazored.LocalStorage" Version="4.5.0" />
|
<PackageReference Include="Blazored.LocalStorage" Version="4.5.0" />
|
||||||
|
|||||||
@@ -0,0 +1,117 @@
|
|||||||
|
@attribute [Route(RouteConstants.Profile.ChargeCreditWallet)]
|
||||||
|
@attribute [Authorize]
|
||||||
|
|
||||||
|
<PageTitle>شارژ کیفپول اصلی</PageTitle>
|
||||||
|
|
||||||
|
<MudContainer MaxWidth="MaxWidth.Medium" Class="py-6">
|
||||||
|
<MudStack Spacing="3">
|
||||||
|
<PageHeader Title="💳 شارژ کیفپول اصلی" BackHref="@RouteConstants.Profile.Wallet" />
|
||||||
|
|
||||||
|
@if (_paymentResult != null)
|
||||||
|
{
|
||||||
|
<MudAlert Severity="@(_paymentResult == "success" ? MudBlazor.Severity.Success : MudBlazor.Severity.Error)"
|
||||||
|
Class="rounded-lg" Variant="Variant.Filled">
|
||||||
|
@if (_paymentResult == "success")
|
||||||
|
{
|
||||||
|
<span>شارژ کیف پول اصلی با موفقیت انجام شد! ✅</span>
|
||||||
|
}
|
||||||
|
else if (_paymentResult == "cancelled")
|
||||||
|
{
|
||||||
|
<span>پرداخت توسط شما لغو شد.</span>
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<span>پرداخت ناموفق بود. لطفاً دوباره تلاش کنید.</span>
|
||||||
|
}
|
||||||
|
</MudAlert>
|
||||||
|
}
|
||||||
|
|
||||||
|
<MudPaper Elevation="2" Class="pa-5 rounded-lg">
|
||||||
|
<MudText Typo="Typo.h6" Class="mb-3">
|
||||||
|
<MudIcon Icon="@Icons.Material.Filled.AccountBalanceWallet" Class="ml-1" />
|
||||||
|
شارژ موجودی اصلی
|
||||||
|
</MudText>
|
||||||
|
|
||||||
|
<MudAlert Severity="MudBlazor.Severity.Info" Dense="true" Class="mb-3" Icon="@Icons.Material.Filled.Info">
|
||||||
|
مبلغ وارد شده (به تومان) از طریق درگاه پرداخت به موجودی اصلی شما اضافه میشود.
|
||||||
|
از موجودی اصلی برای خرید از فروشگاه عادی و پرداخت سفارش استفاده میشود.
|
||||||
|
</MudAlert>
|
||||||
|
|
||||||
|
<MudStack Spacing="2">
|
||||||
|
<MudNumericField @bind-Value="_chargeAmount"
|
||||||
|
Label="مبلغ (تومان)"
|
||||||
|
Variant="Variant.Outlined"
|
||||||
|
Min="10_000"
|
||||||
|
Max="1_000_000_000"
|
||||||
|
Format="N0"
|
||||||
|
Adornment="Adornment.Start"
|
||||||
|
AdornmentIcon="@Icons.Material.Filled.Payments"
|
||||||
|
HelperText="حداقل ۱۰,۰۰۰ و حداکثر ۱,۰۰۰,۰۰۰,۰۰۰ تومان" />
|
||||||
|
|
||||||
|
<MudStack Row="true" Spacing="1" Class="flex-wrap">
|
||||||
|
@foreach (var preset in _presetAmounts)
|
||||||
|
{
|
||||||
|
<MudButton Variant="Variant.Outlined" Size="Size.Small"
|
||||||
|
Color="@(_chargeAmount == preset ? Color.Primary : Color.Default)"
|
||||||
|
OnClick="() => _chargeAmount = preset"
|
||||||
|
Class="rounded-pill">
|
||||||
|
@FormatToman(preset)
|
||||||
|
</MudButton>
|
||||||
|
}
|
||||||
|
</MudStack>
|
||||||
|
|
||||||
|
@if (_chargeAmount > 0)
|
||||||
|
{
|
||||||
|
<MudPaper Outlined="true" Class="pa-3 rounded-lg" Style="background: #eff6ff;">
|
||||||
|
<MudStack Row="true" Justify="Justify.SpaceBetween">
|
||||||
|
<MudText Typo="Typo.body2">مبلغ پرداخت:</MudText>
|
||||||
|
<MudText Typo="Typo.body2"><strong>@FormatToman(_chargeAmount)</strong></MudText>
|
||||||
|
</MudStack>
|
||||||
|
<MudStack Row="true" Justify="Justify.SpaceBetween">
|
||||||
|
<MudText Typo="Typo.body2">موجودی دریافتی:</MudText>
|
||||||
|
<MudText Typo="Typo.body2" Color="Color.Primary"><strong>@FormatToman(_chargeAmount)</strong></MudText>
|
||||||
|
</MudStack>
|
||||||
|
</MudPaper>
|
||||||
|
}
|
||||||
|
|
||||||
|
<MudButton Variant="Variant.Filled"
|
||||||
|
Color="Color.Primary"
|
||||||
|
Size="Size.Large"
|
||||||
|
FullWidth="true"
|
||||||
|
Disabled="@(_isProcessing || _chargeAmount < 10_000)"
|
||||||
|
OnClick="StartCreditCharge"
|
||||||
|
StartIcon="@Icons.Material.Filled.Payment"
|
||||||
|
Class="rounded-lg mt-2">
|
||||||
|
@if (_isProcessing)
|
||||||
|
{
|
||||||
|
<MudProgressCircular Size="Size.Small" Indeterminate="true" Class="me-2" />
|
||||||
|
<span>در حال انتقال به درگاه...</span>
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<span>پرداخت با کارت بانکی</span>
|
||||||
|
}
|
||||||
|
</MudButton>
|
||||||
|
</MudStack>
|
||||||
|
</MudPaper>
|
||||||
|
|
||||||
|
<MudExpansionPanels Elevation="1" Class="rounded-lg">
|
||||||
|
<MudExpansionPanel Text="قوانین شارژ کیف پول اصلی" MaxHeight="500" IsInitiallyExpanded="false">
|
||||||
|
<MudList T="string" Dense="true">
|
||||||
|
<MudListItem T="string" Icon="@Icons.Material.Filled.CheckCircle" IconColor="Color.Success">
|
||||||
|
موجودی اصلی برای خرید از فروشگاه عادی و پرداخت سفارش قابل استفاده است
|
||||||
|
</MudListItem>
|
||||||
|
<MudListItem T="string" Icon="@Icons.Material.Filled.CheckCircle" IconColor="Color.Success">
|
||||||
|
حداقل مبلغ شارژ: ۱۰,۰۰۰ تومان
|
||||||
|
</MudListItem>
|
||||||
|
<MudListItem T="string" Icon="@Icons.Material.Filled.CheckCircle" IconColor="Color.Success">
|
||||||
|
مبلغ واریزی بدون ضریب به موجودی اضافه میشود (۱:۱)
|
||||||
|
</MudListItem>
|
||||||
|
<MudListItem T="string" Icon="@Icons.Material.Filled.Info" IconColor="Color.Info">
|
||||||
|
پرداخت از طریق درگاه بانکی انجام میشود
|
||||||
|
</MudListItem>
|
||||||
|
</MudList>
|
||||||
|
</MudExpansionPanel>
|
||||||
|
</MudExpansionPanels>
|
||||||
|
</MudStack>
|
||||||
|
</MudContainer>
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
using FrontOffice.Main.Utilities;
|
||||||
|
using Microsoft.AspNetCore.Components;
|
||||||
|
using MudBlazor;
|
||||||
|
|
||||||
|
namespace FrontOffice.Main.Pages.Profile;
|
||||||
|
|
||||||
|
public partial class ChargeCreditWallet : ComponentBase
|
||||||
|
{
|
||||||
|
private bool _isProcessing;
|
||||||
|
private long _chargeAmount;
|
||||||
|
private string? _paymentResult;
|
||||||
|
|
||||||
|
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; }
|
||||||
|
|
||||||
|
protected override void OnInitialized()
|
||||||
|
{
|
||||||
|
_paymentResult = PaymentQueryParam;
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task StartCreditCharge()
|
||||||
|
{
|
||||||
|
if (_chargeAmount <= 0 || _isProcessing) return;
|
||||||
|
|
||||||
|
_isProcessing = true;
|
||||||
|
StateHasChanged();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
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 static string FormatToman(long toman)
|
||||||
|
=> string.Format("{0:N0} تومان", toman);
|
||||||
|
}
|
||||||
@@ -143,6 +143,9 @@
|
|||||||
case "discount-wallet":
|
case "discount-wallet":
|
||||||
await VerifyDiscountWalletCharge();
|
await VerifyDiscountWalletCharge();
|
||||||
break;
|
break;
|
||||||
|
case "credit-wallet":
|
||||||
|
await VerifyCreditWalletCharge();
|
||||||
|
break;
|
||||||
case "discount-order":
|
case "discount-order":
|
||||||
await VerifyDiscountOrderPayment();
|
await VerifyDiscountOrderPayment();
|
||||||
break;
|
break;
|
||||||
@@ -254,6 +257,35 @@
|
|||||||
await UpdateWalletBalance();
|
await UpdateWalletBalance();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// تأیید شارژ کیف پول اصلی
|
||||||
|
/// </summary>
|
||||||
|
private async Task VerifyCreditWalletCharge()
|
||||||
|
{
|
||||||
|
_successReturnUrl = "/profile/charge-credit-wallet?payment=success";
|
||||||
|
_successReturnText = "بازگشت به شارژ کیف پول اصلی";
|
||||||
|
_failReturnUrl = "/profile/charge-credit-wallet?payment=failed";
|
||||||
|
_failReturnText = "بازگشت به شارژ کیف پول اصلی";
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(Authority))
|
||||||
|
{
|
||||||
|
_isSuccess = false;
|
||||||
|
_message = "کد Authority نامعتبر است";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var (success, message) = await WalletService.VerifyCreditChargeAsync(
|
||||||
|
Authority, Status ?? "NOK");
|
||||||
|
|
||||||
|
_isSuccess = success;
|
||||||
|
_message = message;
|
||||||
|
|
||||||
|
if (_isSuccess)
|
||||||
|
{
|
||||||
|
await UpdateWalletBalance();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// تأیید پرداخت سفارش فروشگاه تخفیفی
|
/// تأیید پرداخت سفارش فروشگاه تخفیفی
|
||||||
@@ -308,6 +340,7 @@
|
|||||||
{
|
{
|
||||||
"magic-wallet" => "/profile/magic-wallet",
|
"magic-wallet" => "/profile/magic-wallet",
|
||||||
"discount-wallet" => "/profile/charge-discount-wallet",
|
"discount-wallet" => "/profile/charge-discount-wallet",
|
||||||
|
"credit-wallet" => "/profile/charge-credit-wallet",
|
||||||
"discount-order" => "/discount-store",
|
"discount-order" => "/discount-store",
|
||||||
_ => "/profile"
|
_ => "/profile"
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -38,6 +38,17 @@
|
|||||||
درخواستهای برداشت
|
درخواستهای برداشت
|
||||||
</MudButton>
|
</MudButton>
|
||||||
|
|
||||||
|
<!-- دکمه شارژ کیفپول اصلی -->
|
||||||
|
<MudButton Variant="Variant.Filled"
|
||||||
|
Color="Color.Primary"
|
||||||
|
Size="Size.Large"
|
||||||
|
FullWidth="true"
|
||||||
|
StartIcon="@Icons.Material.Filled.AccountBalanceWallet"
|
||||||
|
Href="@RouteConstants.Profile.ChargeCreditWallet"
|
||||||
|
Class="rounded-lg">
|
||||||
|
شارژ کیفپول اصلی
|
||||||
|
</MudButton>
|
||||||
|
|
||||||
<!-- دکمه شارژ کیفپول اعتباری -->
|
<!-- دکمه شارژ کیفپول اعتباری -->
|
||||||
<MudButton Variant="Variant.Filled"
|
<MudButton Variant="Variant.Filled"
|
||||||
Color="Color.Info"
|
Color="Color.Info"
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ public static class RouteConstants
|
|||||||
public const string Wallet = "/profile/wallet";
|
public const string Wallet = "/profile/wallet";
|
||||||
public const string MagicWallet = "/profile/magic-wallet";
|
public const string MagicWallet = "/profile/magic-wallet";
|
||||||
public const string ChargeDiscountWallet = "/profile/charge-discount-wallet";
|
public const string ChargeDiscountWallet = "/profile/charge-discount-wallet";
|
||||||
|
public const string ChargeCreditWallet = "/profile/charge-credit-wallet";
|
||||||
public const string WithdrawalRequests = "/profile/withdrawal-requests";
|
public const string WithdrawalRequests = "/profile/withdrawal-requests";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -266,6 +266,26 @@ public class WalletService
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<(bool Success, string? GatewayUrl, string? Error)> InitiateCreditChargeAsync(long amount)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var response = await _client.InitiateCreditChargeAsync(new InitiateCreditChargeRequest
|
||||||
|
{
|
||||||
|
Amount = amount
|
||||||
|
});
|
||||||
|
|
||||||
|
if (response.IsSuccess)
|
||||||
|
return (true, response.GatewayUrl, null);
|
||||||
|
|
||||||
|
return (false, null, response.ErrorMessage);
|
||||||
|
}
|
||||||
|
catch (Grpc.Core.RpcException ex)
|
||||||
|
{
|
||||||
|
return (false, null, ex.Status.Detail ?? "خطا در ارتباط با سرور");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ============= Wallet Verify Methods =============
|
// ============= Wallet Verify Methods =============
|
||||||
|
|
||||||
public async Task<(bool Success, string Message)> VerifyMagicChargeAsync(string authority, string status)
|
public async Task<(bool Success, string Message)> VerifyMagicChargeAsync(string authority, string status)
|
||||||
@@ -304,6 +324,24 @@ public class WalletService
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<(bool Success, string Message)> VerifyCreditChargeAsync(string authority, string status)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var response = await _client.VerifyCreditChargeAsync(new VerifyWalletChargeRequest
|
||||||
|
{
|
||||||
|
Authority = authority,
|
||||||
|
Status = status
|
||||||
|
});
|
||||||
|
|
||||||
|
return (response.Success, response.Message);
|
||||||
|
}
|
||||||
|
catch (Grpc.Core.RpcException ex)
|
||||||
|
{
|
||||||
|
return (false, ex.Status.Detail ?? "خطا در بررسی وضعیت پرداخت");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public int GetWalletMode()
|
public int GetWalletMode()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
|||||||
Reference in New Issue
Block a user