同时启动多个(许多)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 调用,从而显着减慢页面加载速度。
相反,您应该仅在用户实际单击“订阅”按钮时才创建结帐会话。单击按钮将触发对后端的请求以创建会话并进行重定向。这样每个用户只能创建一个。
我正在使用 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 调用,从而显着减慢页面加载速度。
相反,您应该仅在用户实际单击“订阅”按钮时才创建结帐会话。单击按钮将触发对后端的请求以创建会话并进行重定向。这样每个用户只能创建一个。