@code {
private bool shouldRedirect;
private string authorizationUrl;
protected override async Task OnInitializedAsync()
{
await ProcessCheckout();
}
private async Task ProcessCheckout()
{
try
{
// Initialize checkout process
var userId = await GetUserIdAsync();
var netTotal = await _cartService.GetBasketNetTotalAsync(userId);
var authState = await _authStateProvider.GetAuthenticationStateAsync();
var user = authState.User;
string strEmail = user.FindFirst(System.Security.Claims.ClaimTypes.Email)?.Value;
string token = _configuration["PayStackSettings:PayStackSecretKey"];
var payStack = new PayStackApi(token);
TransactionInitializeRequest request = new()
{
AmountInKobo = Convert.ToInt32(netTotal) * 100,
Email = strEmail,
Reference = Generate().ToString(),
Currency = "GHS"
};
// Initiate transaction
var response = payStack.Transactions.Initialize(request);
if (response.Status)
{
authorizationUrl = response.Data.AuthorizationUrl;
shouldRedirect = true;
StateHasChanged(); // Trigger re-render
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (shouldRedirect)
{
shouldRedirect = false; // Reset flag to prevent re-invoking
await JS.InvokeVoidAsync("open", authorizationUrl, "_blank");
}
}
private async Task GetUserIdAsync()
{
var authState = await _authStateProvider.GetAuthenticationStateAsync();
var user = authState.User;
return user.FindFirst(System.Security.Claims.ClaimTypes.NameIdentifier)?.Value;
}
private static int Generate() => new Random((int)DateTime.Now.Ticks).Next(100000000, 999999999);
}
Привет, ребята! Я пытаюсь открыть URL-адрес авторизации в новой вкладке браузера при нажатии кнопки «Разместить заказ». Мой код просто обновляет страницу, хотя он попадает в ProcessCheckout в режиме отладки. Обратите внимание, что это серверное приложение Blazor
Checkout Place Order [url=/cart]Back to Shopping Bag[/url]
[/code] Лучший способ перенаправить на ссылку авторизации на новой вкладке при нажатии кнопки «Разместить заказ». [code]@code { private bool shouldRedirect; private string authorizationUrl;
private async Task ProcessCheckout() { try { // Initialize checkout process var userId = await GetUserIdAsync(); var netTotal = await _cartService.GetBasketNetTotalAsync(userId);
var authState = await _authStateProvider.GetAuthenticationStateAsync(); var user = authState.User; string strEmail = user.FindFirst(System.Security.Claims.ClaimTypes.Email)?.Value;
string token = _configuration["PayStackSettings:PayStackSecretKey"]; var payStack = new PayStackApi(token);
protected override async Task OnAfterRenderAsync(bool firstRender) { if (shouldRedirect) { shouldRedirect = false; // Reset flag to prevent re-invoking await JS.InvokeVoidAsync("open", authorizationUrl, "_blank"); } }
private async Task GetUserIdAsync() { var authState = await _authStateProvider.GetAuthenticationStateAsync(); var user = authState.User; return user.FindFirst(System.Security.Claims.ClaimTypes.NameIdentifier)?.Value; }
private static int Generate() => new Random((int)DateTime.Now.Ticks).Next(100000000, 999999999); } [/code] Привет, ребята! Я пытаюсь открыть URL-адрес авторизации в новой вкладке браузера при нажатии кнопки «Разместить заказ». Мой код просто обновляет страницу, хотя он попадает в ProcessCheckout в режиме отладки. Обратите внимание, что это серверное приложение Blazor