Перенаправление Stripe Checkout работает только иногда - PullRequest
1 голос
/ 27 мая 2020

Я создаю интернет-магазин, используя 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();
    }
}

1 Ответ

0 голосов
/ 27 мая 2020

При запуске решения без отладки в Visual Studio перенаправление на Stripe Checkout происходит каждый раз.

...