BackEnd

Stripe Connectでダイレクト支払い導入編

投稿日:2021年2月24日 更新日:

はじめに

Stripe Connectとは、マーケットプレイス型のサイトを運営するために、複数の売り手が決済できるようにするサービスです。今回はダイレクト支払いを使用して、店舗に支払う方法を紹介します。

事前準備

Stripe Connectのサンプルを実装する上で、次のテーブルを用意します。

店舗用テーブル:
店舗のStripeアカウントIDを入れておくためのカラムを追加しています。
2021_02_20_000000_create_shops_table.php

商品テーブル:
店舗が販売する商品テーブルです。
2021_02_21_164202_create_products_table.php

StripeConnectの導入

今回はPHP・Laravelで実装していきます。

stripeパッケージの導入

composerで必要なパッケージをインストールしていきます。

envの実装

あらかじめ、.envにStripeに必要なキーを設定しておきます。Stripe管理画面の[開発者]>[APIキー]で確認できます。

店舗アカウントの登録

店舗アカウントを登録する流れを説明します。店舗は自分のStripeアカウントをOauth認証させて、サイトにStripeアカウントIDを登録します。

Stripe Connectの設定

Stripeの管理画面から、[設定]>[Connect]を開きます。
このような画面が表示されるため、設定をしていきます。

  • クライアントIDの取得
    クライアントIDをコピーして控えておいてください。
  • Oauth設定
    今回はStandardを選択します。
  • リダイレクト
    Oauth認証後のリダイレクトURLを指定します。今回は http://localhost/shop/dashboard/stripe_connect を指定します。

Oauth認証とアカウントID取得の実装

ここからは、サイトから店舗ユーザが、StripeにOauth認証でログインする部分を実装していきます。

Oauth認証用リンクの設置

Oauth認証用のURLは以下になります。

ca_hogehogeの部分には、先ほど取得したクライアントIDを指定してください。redirect_urlには、先ほど登録したリダイレクトURLを指定してください。
このリンクにアクセスすると、以下のようなStripeの登録・ログイン画面に遷移します。ここで、店舗はStripeアカウントでログインするか、新規登録することになります。

コードの取得とStripeアカウントIDの取得

認証が終わるとコード付きでリダイレクトされるので、そのパラメータを使用してStripeからアカウント情報を取得します。まずは、先ほどリダイレクト先に指定したルーティングから実装していきます。
web.php

次に、Controllerを実装していきます。
DashboardController.php

Stripeからは、リダイレクトのURLパラメータに、 code というパラメータが取得できます。これが認証に必要なコードなのですが、 Oauth::token() にパラメータごと渡すと、Stripeアカウント情報が取得できます。この中に stripe_user_id という “acct_”から始まる文字列が、Stripe ConnectでのAPI呼び出しに必ず必要になるため、店舗テーブルに保存しておきます。

Stripe Connectでの決済

ここからは実際に決済する部分を実装していきます。

ルーティング

商品の購入ページと購入処理用のルーティングを追加します。

商品購入ページの実装

コントローラーはシンプルですが以下になります。
ProductController.php

viewも実装していきます。カード情報を入力するフォームを表示し、決済できるようにします。

まずは、ここまで実装すると以下のようなページが出来上がります。

カード情報の送信

ここからは、実際に決済する処理を実装していきます。先ほどのviewファイルに以下のJSを追記します。

stripe.createPaymentMethod() を呼び出してStripeにカード情報を送信します。成功するとPaymentMethodが取得できます。PaymentMethodはそのまま決済にも使用できるほか、Stipre顧客を作成し、顧客の支払方法として登録することもできます。(今回は、決済にのみ使用します。)
result.paymentMethod.id がこの後の決済処理で必要となるパラメータなので、これをformにセットして、submitします。

決済処理の実装

先ほど取得したpayment_method_idを使用して、実際に決済する処理を実装していきます。

PaymentIntent::create() メソッドは、任意の金額で決済するメソッドです。第一引数のパラメータは、Stripe Connectを使用しない場合と同じですが、第二引数がポイントです。
第二引数では、 stripe_account キーに、支払先店舗のStripeアカウントIDを指定します。これを指定しないと、プラットフォームアカウント(大元のアカウント)への支払になってしまうため、注意してください。 stripe_account を指定するAPI呼び出しは、他のAPIでも使用できるので、StripeConnectで店舗に関するAPIをリクエストするときは、この第二引数を指定する必要があると覚えておいてください。

さいごに

今回はStripe Connectの導入編でした。次回は、支払方法の管理について紹介したいと思います。

おすすめ書籍

PHPフレームワークLaravel入門 第2版 PHPフレームワーク Laravel実践開発 PHPフレームワーク Laravel Webアプリケーション開発 バージョン5.5 LTS対応 よくわかるPHPの教科書 【PHP7対応版】

blog-page_footer_336




blog-page_footer_336




-BackEnd
-,

執筆者:


comment

メールアドレスが公開されることはありません。

CAPTCHA


関連記事

aws

ALB+EC2な環境でhttpをhttpsにリダイレクトする

1 はじめに1.1 前提条件2 ALBの設定3 Nginxの設定3.1 注意点4 さいごに はじめに httpsに対応済みのWebサイトの場合、httpでアクセスされた時にhttpsでリダイレクトする ...

rails

私たちのFactoryGirlとRspecの使用ルール その1

1 はじめに2 そもそもなぜ基本ルールなどを作成しようとしたのか?3 Rspec編3.1 describe、context、itの階層で使用する3.2 10個以上のテストレコードを作成したい場合は、ト ...

rails

configに追記したのに、rails runnerが起動しない?

1 はじめに1.1 環境2 rails runnerを使用してみる2.1 バッチファイルの作成2.2 configにパスを追記2.3 実行3 ところが…3.1 解決方法4 おまけ(runnerコマンド ...

Go言語

go:embedとGo 1.16、1.17での変更点まとめ

1 はじめに1.1 変更点一覧2 go:embedとは3 go:embedの使い方3.1 基本的な使い方3.2 複数のファイルを埋め込む3.3 異なるディレクトリのファイルを埋め込む3.4 ディレクト ...

laravel logo

LaravelのFacade(ファサード)とは? 何気なく使用していた裏側の仕組みを解説!

1 はじめに1.1 Facadeを使用しているクラス2 Facadeの仕組み3 Facadeの作成3.1 サンプルコードに必要な実装3.2 Serviceの作成3.3 Facadeクラスの作成3.4 ...

フォロー

blog-page_side_responsive

2021年2月
 123456
78910111213
14151617181920
21222324252627
28  

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。