Laravel8とSTRIPEの連携で $paymentMethod が設定できず悩んでいる方へ

Laravel上の決済機能

LaravelのCashierがバージョンアップした際、それまでの機能が一部、使えなくなりました。

そのため、少し前の記事で解説されている方法を使うと「$paymentMethodがない」と言われ、エラーになります。

そうとも知らず、わたしは無駄に試行錯誤をしてしまいました><

同じように、このトラップにかかってしまった方のために、原因と対策を記事にします。

じゅんこ
じゅんこ

この経験が、他の方の役に立てば、少しは報われます。

Laravel8とSTRIPEの連携で $paymentMethod が設定できず悩んでいる方へ

まずは、なぜこれまでの方法が使えなくなったのか、問題の原因から説明していきますね。

なぜこれまでの方法が使えなくなったのか

Laravelのマニュアルでは、サブスクリプションを作成する際のコードとして、下記が提示されています。

$user = User::find(1);
$user->newSubscription(‘default’, ‘price_premium’)->create($paymentMethod);

この $paymentMethodは、少し前までなら、下記のようにコントローラーに記述すればOKだったようです。

$token = $_POST[‘stripeToken’];
$user = User::find($id);
$user->newSubscription(‘main’, ‘Plan Id’) ->create($request->stripeToken);

検索をかけると、このようにサブスクリプション作成を行うよう解説しているものが結構あります。

ただ、2019年8月にCashier10がリリースされた際、上記の方法は使えなくなりました。

がんばって行おうとすると「$paymentMethodがない」「無効だ」といったエラーがでます。

対策① Cashierを古いバージョンで使う

ではどうすれば良いのかですが、一番シンプルなのは、Cashierを古いバージョンで使うことです。

通常は、下記のコードによって最新版の cachierパッケージをインストールできます。

$ composer require laravel/cashier

このとき、バージョンを指定することで、古いcashierをインストールできます。

$ composer require “laravel/cashier”:”~9.0″

対策② balde.phpファイル側で$paymentMethodを設定する

もうひとつの方法はblade.phpファイル側で$paymentMethodを設定しておくこと。

こちらのほうが正当法ですが、面倒です。

ざっとコードをお見せします。

ビュー表示用のコントローラー

まずビューを表示させるためのコントローラーに、次のようにいれておきます。

ビューのフォーム部分

ビューのフォーム部分は、下記のようにしておきます。

なお外見はすごくテキトウです^^;

ご了承ください。

ビューのJavascript部分

Javascript部分は、次のようになります。

フォーム送信後のコントローラー

フォームをポストした後、コントローラーの処理は下記の感じになります。

$planは別途定義してください。

より詳しい手順はこちらをどうぞ!

さいごに

今回の件で、少し前に書かれた方法でも、既に使えない可能性があることを改めて学びました。

正直、分かったときはガックリきましたが Σ( ̄ロ ̄lll)ガーン

今後も、色々な変化は起こるかもしれません。

このエラーのもとになった変更は、そもそも、認証に関する規制が強まったことによって起こっています。

詳しく解説してみたので、気になる方は、こちらの記事をお読みください。

別の記事でもLaravelとStripe連携を解説しているので、トラブルなどがあれば、関連記事をチェックしてくださいね。

コメント

タイトルとURLをコピーしました