Laravel Stripe

[Laravel8][Stripe Cashier]名前とメールアドレスをStripeに同期させる

Lravelでの開発で、サブスクリプションのWEBサービスを作っているのですが、これが簡単ではないですね(汗)

どこかで、○○時間でStripeのサブスクリプションができる!みたいな記事を見たのですが、絶対に無理ですね。

1,Stripe側のの仕様が頻繁に変わる
2,定期課金ならwebhookの処理が必ず必要になる
3,Stripeのダッシュボードの仕様が変更して、エラーイベント発行が簡単にできなくなっている
4,クレジットカード情報の更新、削除
5,名前やEメールアドレスなども同期させる必要がある
6,決済履歴や領収書、請求書の発行も必要になるかも

など、その他、そのアクションに応じてメール送信もしてあげる必要はあるし、かなりのボリュームになります。

この定期課金のプログラミングだけでも60万円〜90万円はしても全然普通だと思いますね。

何度ほど、Stripeのお問合せをして、チャットやメールでやりとりしたことか。。。

LaravelのCahiserの情報は結構多いのですが、古くて使えなかったり、使っているフォームが異なっていたりで、「使える」という情報が少なく、英語の情報に頼ることが多いです。

特にComposerのエラーやJavaScriptのエラーでは、何日頭を抱え込んだか。。

と、、それぐらいに大変な作業でもあります。

今回は、「名前やEメールアドレスなども同期させる必要がある」の情報がどこにも載っていなく、公式サイトのところは使い方がよくわからなかったので、試行錯誤して下記のようにしてみました。

// マイページで名前とメールアドレスが変更されるとStripe側も変更される
    public function mypage_update(Request $request){
        $user = Auth::user();
        $attribute = request()->validate([
        'name' => ['required', 'min:1', 'max:100'],
        'email' => ['required','email',Rule::unique('users')->ignore($user->id)],
        ]);
        User::where('id', $user->id)->update($attribute);
        if ($user->hasStripeId()){
            $options = [
                "name" => $request->name, 
                "email" => $request->email,
            ];
            $user->updateStripeCustomer($options);
        }
        
        return back()->with('success', '変更しました');
    }

$user->hasStripeId()で現在Stripeにそのユーザーが登記されているかどうかを判定しています。

登記されていない場合は、Stripe側は何もしません。

プログラミング的にはtryとか使ったほうが良いかもしれませんが、まずはわかりやすい簡易のため。

これをweb.phpでPOSTで設定して、そのルートをFormのActionで指定してあげるとできます。

Stripeにログインしてダッシュボードで確認しながらやってみてくださいね。

-Laravel, Stripe

© 2022 青い空とコーヒーと