【发布时间】:2020-09-14 05:00:15
【问题描述】:
我正在使用 ASP.NET Core 和 Stripe Checkout 创建一个网上商店。
但是,重定向到 Stripe Checkout有时会起作用。
我正在尝试重定向到 window.onload 上的 Stripe Checkout,并且我还实现了一个锚标记,该标记指向用户可以单击的相同功能,以防不发生重定向。但是,当重定向在 window.onload 上不起作用时,锚标记重定向也不起作用。
我尝试将 console.log 放入 redirectToCheckout() 并且可以确认该函数在 window.onload 和单击锚标记上都被触发。但遗憾的是,大部分时间都不会重定向到 Stripe Checkout。奇怪的是它有时会起作用。
剃刀页面:
@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();
}
}
【问题讨论】:
标签: c# asp.net asp.net-core stripe-payments