概要
- laravelで提供しているアプリケーションでStripeを使った決済を実装してみる。
前提
- 設定はすべてStripeのテスト環境で行う。 テスト環境ならどんな設定をしても料金の徴収が発生することはない。
流れ
- laravel cashierを入れる。
- Stripeに登録する。(テスト環境なら無料)
- 税務自動処理の有効化
- テストの商品を登録
- APIキーの取得と.envの記載
- コード側の税の自動計算設定
- 疎通確認
方法
-
laravel cashierを入れる。
-
下記を実行してパッケージを入れる。本ライブラリはStripe公式が出している
stripe/stripe-php
のパッケージを完全にラップしている。ただし一部の機能はカバーしていないので必要な場合はstripe/stripe-php
の方で用意されている処理を直接呼び出す必要がある。なお、下記パッケージを入れるとstripe/stripe-php
も依存関係でダウンロードされる。カバーしていない仕組みを使いたい場合、改めてcomposer require stripe/stripe-php
を実行する必要はなさそうだ。composer require laravel/cashier
-
下記を実行してマイグレーションを行う。おそらくusersテーブルへのカラム追加とsubscription_itemsとsubscriptionsというテーブルが追加される。
php artisan migrate
-
Userモデルのクラスを開き、Billableトレイトをuserする。
app/Models/User.phpuse Laravel\Cashier\Billable; use Billable; // クラス定義の中に記載する
-
下記を実行し、ルーティングの一覧を出力し、
GET|HEAD stripe/payment/{id}
とPOST stripe/webhook
のルーティングが追加されていることを確認する。php artisan route:list
-
-
Stripeに登録する。(テスト環境なら無料)
-
下記にアクセスする。
-
「今すぐ始める」をクリックする。
-
各種情報を入力して「アカウントを作成」をクリックする。
-
メールが届くので認証する。
-
「支払いの受け取りを設定する」を一旦クリックする。
-
左上の「✕」をクリックする。
-
ダッシュボードが開く。
-
-
税務自動処理の有効化
-
テストの商品を登録
-
APIキーの取得と.envの記載
-
ダッシュボードで「開発者向けAPIキー」をクリックする。
-
「公開可能キー」を
STRIPE_KEY
として、「シークレットキー」をSTRIPE_SECRET
として.envに記載する。 -
その他下記の情報を.envに記載する。
.envCASHIER_CURRENCY=ja_JP CASHIER_CURRENCY_LOCALE=ja_JP CASHIER_LOGGER=daily
-
下記を実行してconfigのキャッシュクリアを行う。
php artisan config:clear
-
php -m | grep intl
を実行し、ヒットすれば何もしない。ヒットしなかったらphp-intl(ext-intl)という拡張モジュールをインストールする。当該の拡張モジュールは.envのCASHIER_CURRENCY
でen
以外を設定するときに必ず必要らしい。
-
-
コード側の税の自動計算設定
-
app/Providers/AppServiceProvider.php
を開き、bootメソッドに下記の内容を追記する。app/Providers/AppServiceProvider.phpuse Laravel\Cashier\Cashier; public function boot(): void { Cashier::calculateTaxes(); }
-
-
疎通確認
-
usersテーブルにデータを1レコード分入れておく。(Stripe系以外のカラム)
-
tinkerを起動する。
-
下記を実行し、エラーが発生しないことを確認する。
$user = App\Models\User::first(); $paymentMethod = 'pm_card_visa'; $user->updateStripeCustomer([ 'address' => [ 'line1' => '1234 Main Street', 'city' => 'San Francisco', 'postal_code' => '94111', 'state' => 'CA', 'country' => 'US', ], ]); $user->newSubscription('default', 'price_1OAYFcEwNfmSaNN21CiuaKNj')->create($paymentMethod);
-
Stripeの左サイドバーの「支払い」をクリックする。
-
参考文献