サブスクリプション対応決済サービス Stripe と Laravel からサブスクリプションを操作する Laravel Cashier についてのメモ書き

Laravel で Stripeサブスクリプションを簡単にする Laravel Cashier を導入する

● Laravel Cashier

https://readouble.com/laravel/5.8/ja/billing.html

https://laravel.com/docs/5.8/billing

● インストール Laravel アプリケーションをセットアップ後 composer からインストールします

composer require laravel/cashier

● 決済通貨を円にする

モデルの boot() メソッドで設定します

    protected static function boot()
    {
	parent::boot();
	\Laravel\Cashier\Cashier::useCurrency('jpy', '¥');
    }

● ユーザーとサブスクリプションを紐付ける

$subscription_name = 'main';
$stripe_plan_id_name = 'plan_123456789';
$user->newSubscription($subscription_name, $stripe_plan_id_name)->create($stripe_token);

引数の説明

* サブスクリプション名($subscription_name)をどう命名するかですが、これは公式サイトにあるように main でOKです。
サブスクリプションのプランが例えば「ノーマル」と「ヘビー」と2つあって、途中で「ノーマル」から「ヘビー」に切り替わる場合も サブスクリプション名は変わりません。(代わりにプランIDが変更になります。)あるサービスでサブスクリプションが同時に2種類契約されるということはほぼないと思いますので、 main でOKだと思います。  
1ユーザーに複数のサブスクリプション契約を許す場合は、商品ごとのユニークな名前(商品ID)を渡しておけば良いと思います。
// $subscription_name : サブスクリプション名(任意の文字列・プランごとにユニークな名前が良い)(subscriptions テーブルの name カラムに格納されます )
// $plan : Stripe のプランID
// $token : ユーザーがカード番号を入れた後にStripeから自動発行されるトークン
newSubscription( string  $subscription  , string  $plan )->create( string $token );

● ユーザーとサブスクリプションを紐付ける時に細かいユーザー情報を登録する

(ユーザー情報を登録しておくとStripe管理画面を見た時に情報が沢山あるので分かりやすくなります)


$new_subscription = $user->newSubscription($subscription_name, $stripe_plan_id_name);
$new_subscription->create($stripe_token, [
    'name'    => "山田 太郎" ,
    'phone'   => '090-123-4567 ,
    'address' => [
        'postal_code' => '123-4567' ,
        'state'       => '東京都' ,
        'line1'       =>'住所1' ,
        'line2'       =>'住所2' ,
    ] ,
]);    

● ユーザーがサブスクリプションを紐付いているかどうか確認する

if ( $auth__user->subscribed( $subscription_name ) ){
    dd("すでに{$subscription_name}に登録済みです。”);
}

● 請求日を指定してサブスクリプションと紐付ける

$c = Carbon::parse('first day of next month'); // 月の初め(1日)をセット
$c->startOfDay(); // 時間 00:00:00 をセット

$user->newSubscription($subscription_name, $stripe_plan_id_name)
                        ->anchorBillingCycleOn( $c)       // 請求アンカーを指定する
                        ->create($stripe_token);

● 初期費用の1回課金を行う(インボイスつき)

$user->invoiceFor('商品名', 価格, [
    'quantity' => 50,
], [
    'tax_percent' => 21,
]);

引数は

【string 商品名】,【int 価格】,【array インボイスアイテムへの支払いオプション】,【array インボイス自身に対する支払いオプション】

です。

Stripe API Invoiceitems( create ) : https://stripe.com/docs/api/invoiceitems/create

関連エントリー

No.1497
05/06 15:53

edit

LaravelCashier