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にログインしてダッシュボードで確認しながらやってみてくださいね。