Phase 8a: Wire up Checkout page to Customer* RPCs
- Checkout.razor.cs: Rewrite ProcessPayment() to use CustomerPurchasePackageAsync instead of disabled dead code (old TransactionsContract + UserOrderContract flow removed) - Callback URL now points to /profile/payment-callback (reuses existing verify page with CustomerVerifyPackagePurchase) - Remove unused DI: UserOrderContract, TransactionContract - Remove unused usings: Transactions, UserOrder, WellKnownTypes - Profile/Index.razor.cs: Rename basePackage → selectedPackage, tempCallbackUrl → callbackUrl (cosmetic) - Build: 0 errors
This commit is contained in:
@@ -1,10 +1,7 @@
|
||||
|
||||
using CMSMicroservice.Protobuf.Protos.Package;
|
||||
using CMSMicroservice.Protobuf.Protos.Transactions;
|
||||
using CMSMicroservice.Protobuf.Protos.UserAddress;
|
||||
using CMSMicroservice.Protobuf.Protos.UserOrder;
|
||||
using FrontOffice.Main.Utilities;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using MudBlazor;
|
||||
using Severity = MudBlazor.Severity;
|
||||
@@ -15,8 +12,6 @@ public partial class Checkout
|
||||
{
|
||||
[Inject] private PackageContract.PackageContractClient PackageClient { get; set; } = default!;
|
||||
[Inject] private UserAddressContract.UserAddressContractClient UserAddressContract { get; set; } = default!;
|
||||
[Inject] private UserOrderContract.UserOrderContractClient UserOrderContract { get; set; } = default!;
|
||||
[Inject] private TransactionsContract.TransactionsContractClient TransactionContract { get; set; } = default!;
|
||||
|
||||
[Parameter] public long? PackageId { get; set; }
|
||||
|
||||
@@ -173,9 +168,6 @@ public partial class Checkout
|
||||
|
||||
private async Task ProcessPayment()
|
||||
{
|
||||
Snackbar.Add("درگاه پرداخت متصل نیست! لطفا در زمان دیگری مجددا تلاش فرمایید!", Severity.Warning);
|
||||
return;
|
||||
|
||||
if (!CanProceedToPayment || _selectedPackage == null || _selectedAddress == null)
|
||||
{
|
||||
Snackbar.Add("لطفاً پکیج و آدرس را انتخاب کنید.", Severity.Warning);
|
||||
@@ -186,33 +178,29 @@ public partial class Checkout
|
||||
|
||||
try
|
||||
{
|
||||
// Step 1: Create payment request
|
||||
var paymentRequest = new CustomerPaymentRequestRequest
|
||||
var callbackUrl = $"{Navigation.BaseUri}profile/payment-callback";
|
||||
|
||||
var response = await PackageClient.CustomerPurchasePackageAsync(new CustomerPurchasePackageRequest
|
||||
{
|
||||
Amount = _finalPrice,
|
||||
CallbackUrl = $"{Navigation.BaseUri}checkout/callback",
|
||||
Description = $"خرید پکیج {_selectedPackage.Title}",
|
||||
Currency = CurrencyEnum.Irt,
|
||||
Type = TransactionTypeEnum.Real
|
||||
};
|
||||
|
||||
var paymentResponse = await TransactionContract.CustomerPaymentRequestAsync(paymentRequest);
|
||||
|
||||
if (string.IsNullOrEmpty(paymentResponse.PaymentGWUrl))
|
||||
Snackbar.Add("آدرس درگاه پرداخت دریافت نشد.", Severity.Error);
|
||||
|
||||
// Step 2: Create user order
|
||||
var orderRequest = new CreateNewUserOrderRequest
|
||||
{
|
||||
Amount = _finalPrice,
|
||||
PackageId = _selectedPackage.Id,
|
||||
PaymentStatus = CMSMicroservice.Protobuf.Protos.PaymentStatus.Pending
|
||||
};
|
||||
CallbackUrl = callbackUrl,
|
||||
PurchaseMethod = PurchaseMethodEnum.PurchaseMethodGateway
|
||||
});
|
||||
|
||||
var orderResponse = await UserOrderContract.CreateNewUserOrderAsync(orderRequest);
|
||||
if (!response.Success)
|
||||
{
|
||||
Snackbar.Add(response.Message ?? "خطا در آغاز فرآیند پرداخت", Severity.Error);
|
||||
return;
|
||||
}
|
||||
|
||||
// Step 3: Redirect to payment gateway
|
||||
Navigation.NavigateTo(paymentResponse.PaymentGWUrl);
|
||||
if (!string.IsNullOrEmpty(response.PaymentGatewayUrl))
|
||||
{
|
||||
Navigation.NavigateTo(response.PaymentGatewayUrl, forceLoad: true);
|
||||
}
|
||||
else
|
||||
{
|
||||
Snackbar.Add("خطا در دریافت آدرس درگاه پرداخت", Severity.Error);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
@@ -413,23 +413,22 @@ public partial class Index
|
||||
|
||||
try
|
||||
{
|
||||
// Get available packages and pick the first (base) one
|
||||
// Get available packages and pick the first one
|
||||
var packages = await PackageContract.GetCustomerPackagesAsync(new GetCustomerPackagesRequest());
|
||||
var basePackage = packages?.Models?.FirstOrDefault();
|
||||
if (basePackage == null)
|
||||
var selectedPackage = packages?.Models?.FirstOrDefault();
|
||||
if (selectedPackage == null)
|
||||
{
|
||||
Snackbar.Add("پکیجی برای خرید یافت نشد", Severity.Error);
|
||||
return;
|
||||
}
|
||||
|
||||
// Call CMS to initiate purchase (UserId from JWT, PackageId explicit)
|
||||
// First, get orderId — then embed in callback URL
|
||||
var tempCallbackUrl = $"{Navigation.BaseUri}profile/payment-callback";
|
||||
var callbackUrl = $"{Navigation.BaseUri}profile/payment-callback";
|
||||
|
||||
var response = await PackageContract.CustomerPurchasePackageAsync(new CustomerPurchasePackageRequest
|
||||
{
|
||||
PackageId = basePackage.Id,
|
||||
CallbackUrl = tempCallbackUrl,
|
||||
PackageId = selectedPackage.Id,
|
||||
CallbackUrl = callbackUrl,
|
||||
PurchaseMethod = PurchaseMethodEnum.PurchaseMethodGateway
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user