Я создаю интернет-магазин, используя ASP. NET Core and Stripe Checkout.
Однако перенаправление на Stripe Checkout работает только иногда .
Я пытаюсь перенаправить на Stripe Checkout в window.onload, и я также реализовал тег привязки, указывающий на ту же функцию, которую пользователь может щелкнуть в случае, если перенаправление не происходит. Однако, когда перенаправление не работает для window.onload, перенаправление тега привязки тоже не работает.
Я попытался поместить console.log в redirectToCheckout () и могу подтвердить, что функция запускается как для window.onload, так и при щелчке тега привязки. Но, увы, перенаправления на Stripe Checkout в большинстве случаев нет. Странно то, что иногда это срабатывает.
Страница Razor:
@page
@model {MODEL_PATH}
@{
ViewData["Title"] = "Payment";
}
@section Header{
<partial name="_ShopHeader" />
}
<div class="container">
<!-- Some HTML -->
<div class="row mt-2 justify-content-center">
<div class="col-lg-8 col-11">
<div class="bg-white">
<div class="m-0 p-3">
<h5 style="color:blue;">Redirecting to Stripe Checkout</h5>
<div class="row justify-content-center">
<div class="col-12 text-center">
<div class="spinner-border mt-3" role="status">
</div>
<p class="mt-4">If nothing happens, click <a href="#" onclick="redirectToCheckout()">here</a></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@section Styles {
<link rel="stylesheet" href="@Url.Content("~/css/custom-index.css")" type="text/css" />
<link rel="stylesheet" href="@Url.Content("~/css/custom-shop.css")" type="text/css" />
}
@section Scripts {
<script src="https://js.stripe.com/v3/"></script>
<script>
var stripe = Stripe('{MY_STRIPE_PUBLISHABLE_KEY}');
var stripeSessionId = '@Model.CheckoutSessionId';
window.onload = redirectToCheckout();
function redirectToCheckout() {
stripe.redirectToCheckout({
sessionId: stripeSessionId,
}).then(function (result) {
console.log(result.error.message);
});
};
</script>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script src="~/js/Shop/cart.js"></script>
}
Код программной части:
public class PaymentModel : PageModel
{
private readonly AppDbContext _context;
public PaymentModel(AppDbContext context)
{
_context = context;
}
public string CheckoutSessionId { get; set; }
public IActionResult OnGet()
{
CartViewModel cart = new CartManager(_context, HttpContext.Session).GetCart();
CustomerViewModel customer = new CustomerManager(HttpContext.Session).GetCustomer();
string orderReference = DateTime.Now.ToOADate().ToString().Replace(",", string.Empty);
Customer stripeCustomer = new StripeCustomerManager().CreateStripeCustomer(customer);
Session stripeSession = new StripeSessionManager().CreateStripeSession(cart, stripeCustomer, orderReference);
CheckoutSessionId = stripeSession.Id;
return Page();
}
}