Stable payment and order process
This commit is contained in:
@@ -19,7 +19,6 @@ public partial class Checkout()
|
||||
[Inject] public IOptions<PayfastSettings> PayfastOptions { get; set; } = default!;
|
||||
[Inject] private AuthenticationStateProvider AuthStateProvider { get; set; } = default!;
|
||||
[Inject] public IJSRuntime JSRuntime { get; set; } = default!;
|
||||
[Inject] private HydrationService HydrationService { get; set; } = default!;
|
||||
[Inject] private CancellationToken CancellationToken { get; set; } = default!;
|
||||
|
||||
private Cart ShoppingCart => CartService.ShoppingCart;
|
||||
@@ -38,19 +37,6 @@ public partial class Checkout()
|
||||
|
||||
Navigation.LocationChanged += OnLocationChanged;
|
||||
CartService.OnCartChanged += CartService_OnCartChanged;
|
||||
|
||||
await CartService.LoadCartFromStorageAsync();
|
||||
}
|
||||
|
||||
protected override async Task OnAfterRenderAsync(bool firstRender)
|
||||
{
|
||||
if (firstRender == false && HydrationService.CartHydrated == false)
|
||||
{
|
||||
await HydrationService.EnsureCustomerExistsAsync(CancellationToken);
|
||||
await HydrationService.RehydrateCartFromPendingOrderAsync(CancellationToken);
|
||||
|
||||
CartService.NotifyStateChanged();
|
||||
}
|
||||
}
|
||||
|
||||
private async void CartService_OnCartChanged() => await InvokeAsync(StateHasChanged);
|
||||
@@ -117,13 +103,26 @@ public partial class Checkout()
|
||||
var orderHash = HashService.HashEncodeLongId(orderId).Value;
|
||||
var paymentGen = await PaymentService.CreatePaymentAsync(ShoppingCart.TotalAmount, orderId, orderHash, CancellationToken);
|
||||
|
||||
long paymentId = 0;
|
||||
|
||||
if (paymentGen.IsSuccess) paymentId = paymentGen.Value;
|
||||
|
||||
if(paymentGen.IsFailed)
|
||||
{
|
||||
var paymentFetch = await PaymentService.GetOrderPaymentAsync(orderId, CancellationToken);
|
||||
|
||||
if (paymentFetch.IsFailed) return;
|
||||
|
||||
paymentId = paymentFetch.Value.Id;
|
||||
}
|
||||
|
||||
CreateLedgerEntry ledgerRequest = new()
|
||||
{
|
||||
OrderId = orderId,
|
||||
CustomerId = customerId,
|
||||
PaymentGatewayId = 1, // TODO: lookup value to match user selection
|
||||
PaymentGatewayId = 1,
|
||||
PaymentGatewayReference = orderHash,
|
||||
PaymentId = paymentGen.Value,
|
||||
PaymentId = paymentId,
|
||||
Status = LiteCharms.Features.LedgerStatuses.Sent,
|
||||
};
|
||||
await PaymentService.WriteLedgerEntryAsync(ledgerRequest, CancellationToken);
|
||||
@@ -135,8 +134,8 @@ public partial class Checkout()
|
||||
{
|
||||
{ "merchant_id", PayfastOptions.Value.MerchantId! },
|
||||
{ "merchant_key", PayfastOptions.Value.MerchantKey! },
|
||||
{ "return_url", $"{hostAddress}/payment-success" },
|
||||
{ "cancel_url", $"{hostAddress}/payment-failed" },
|
||||
{ "return_url", $"{hostAddress}/payment-success?reference={orderHash}" },
|
||||
{ "cancel_url", $"{hostAddress}/payment-failed?reference={orderHash}" },
|
||||
{ "notify_url", "https://api.uat.midrandbooks.co.za/v1/payments/payfast/confirm" },
|
||||
{ "email_address", User?.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Email)!.Value! },
|
||||
{ "m_payment_id", orderHash },
|
||||
|
||||
Reference in New Issue
Block a user