同时启动多个(许多)Stripe Checkout 会话?

Initiating multiple (many) Stripe Checkout sessions at the same time?

我正在使用 Laravel Cashier / Stripe Checkout(订阅)。

我有多个计划,我只想在一页 (/subscribe) 中列出所有计划,每个计划都有一个 link(按钮)用于发送用户到 Stripe Checkout 页面(订阅)。

当用户访问 /subscribe 页面时,我为每个计划启动 Stripe Checkout sessions

Route::get('/subscribe', function () {
    $checkout1 = Auth::user()->newSubscription('Supporter', 'price_1')->checkout([
        'success_url' => route('dashboard'),
        'cancel_url' => route('dashboard'),
        'client_reference_id' => auth()->id(),
    ]);

    $checkout2 = Auth::user()->newSubscription('Supporter', 'price_2')->checkout([
        'success_url' => route('dashboard'),
        'cancel_url' => route('dashboard'),
        'client_reference_id' => auth()->id(),
    ]);
    
    $checkout3 = Auth::user()->newSubscription('Supporter', 'price_3')->checkout([
        'success_url' => route('dashboard'),
        'cancel_url' => route('dashboard'),
        'client_reference_id' => auth()->id(),
    ]);
    
    $checkout4 = Auth::user()->newSubscription('Supporter', 'price_4')->checkout([
        'success_url' => route('dashboard'),
        'cancel_url' => route('dashboard'),
        'client_reference_id' => auth()->id(),
    ]);
    
    // ... AND MANY MORE ...
    
    
    $checkout10 = Auth::user()->newSubscription('Supporter', 'price_10')->checkout([
        'success_url' => route('dashboard'),
        'cancel_url' => route('dashboard'),
        'client_reference_id' => auth()->id(),
    ]);

    return view('subscribe', compact('checkout1', 'checkout2', 'checkout3', 'checkout4' ... '$checkout10'));
});

这是错误和错误的吗?我问是因为启动所有这些会话似乎会减慢 /subscribe 页面的加载速度,我想这是因为每当我们调用 checkout() 方法(启动会话)时 - 一个新的 API会打电话 + 收银员会打 DB。

如果同时发起多个会话是错误的,那么正确的方法是什么?我知道我可以为每个计划添加额外的页面(视图),然后每页只有一个会话启动,但我想尽可能避免这种情况(我只想要一个列出计划的页面,其中每个计划都有自己的“订阅”按钮,当用户单击该按钮时 - 他直接转到 Stripe。

是的,这是错误和糟糕的。这将使您的页面非常慢,因为您对 Stripe API 有很多请求,创建了许多结帐会话,即使不是全部,但大部分时间大部分时间都不会被使用。由于它是异步运行的,因此它将按顺序执行数据库写入和 Stripe API 调用,从而显着减慢页面加载速度。

相反,您应该仅在用户实际单击“订阅”按钮时才创建结帐会话。单击按钮将触发对后端的请求以创建会话并进行重定向。这样每个用户只能创建一个。