Laravel Cashier 提供口語化,流暢的介面與 Stripe 的訂購交易服務介接。它幾乎處理了所有讓人退步三舍的訂購管理相關邏輯。除了基本的訂購管理,Cashier 還可以處理折價券,訂購轉換,管理訂購「數量」、取消寬限期,甚至產生收據的 PDF。
建立訂購
要建立一個訂購,首先要取得可交易的模型實例,這通常會是 App\User 的實例。一旦你取得了模型實例,你可以使用 newSubscription 方法來管理模型的訂購:
$user = User::find(1);
$user->newSubscription('main', 'monthly')->create($creditCardToken);
傳遞給 newSubscription 方法的第一個參數應該為訂單的名稱。如果你的應用程式只提供一個單一的訂購方式,你可能會呼叫 main 或 primary。第二個參數是用於特定 Striple 方案的使用者訂購。這個值應該對應到在 Stripe 計畫的識別碼。
create 方法會自動建立與 Stripe 的交易,以及將 Stripe 客戶 ID 和其他相關帳款資訊更新到資料庫。如果你的方案有在 Stripe 設定試用期,試用到期日也會自動儲存至使用者的記錄。
額外使用者詳細資料
如果你想自定額外的顧客詳細資料,你可以將資料陣列作為 create 方法的第二個參數傳入:
$user->newSubscription('main', 'monthly')->create($creditCardToken, [
'email' => $email, 'description' => '我們的第一個客戶'
]);
想知道更多 Stripe 支援的額外欄位,請查看 Stripe 的建立顧客的文件。
折價券
如果你想在建立訂購的時候使用折價券,可以使用 withCoupon 方法:
$user->newSubscription('main', 'monthly')
->withCoupon('code')
->create($creditCardToken);
確認訂購狀態
一旦使用者在你的應用程式訂購,你可以使用多種便捷的方法,很簡單的檢查他們的訂購狀態。首先,當使用者擁有有效訂購時,subscribed 方法會回傳 true,即使該訂購目前在試用期間:
if ($user->subscribed('main')) {
//
}
subscribed 方法很適合用在路由中介層,讓你可以透過使用者的訂購狀態,過濾存取路由及控制器:
public function handle($request, Closure $next)
{
if ($request->user() && ! $request->user()->subscribed('main')) {
// 此使用者不是付費使用者...
return redirect('billing');
}
return $next($request);
}
如果你想確認使用者是否還在他們的試用期內,你可以使用 onTrial 方法。此方法在向使用者顯示他們還在試用期內的警告是很有用的:
if ($user->subscription('main')->onTrial()) {
//
}
onPlan 方法可以用 Stripe ID 來確認使用者是否訂購某方案:
if ($user->onPlan('monthly')) {
//
}