Stripe カスタマーポータルとは… 定期課金でのカード情報変更や支払の中断、再開等の操作をお客さんご自身で操作していただけるサービスです。
実際にこれをシステム内に組み込もうと思ったらかなりの工数がかかりますが、Stripe カスタマーポータル(Stripe Customer Portal)を利用することで高機能なシステムが利用できることになります。
デジタルキューブ様のこちらの記事が大変参考になりました。
Subscription(定額課金)システムを利用する場合、一般的には API / SDK を利用したプログラ […]
今回の動作環境は下記のとおりです。
PHP 8.0, Stripe-php バージョン 7.94.0
カスタマーポータルを利用するために
カスタマーポータルを利用するために必要なものは…
決済時に発行された カスタマーID (データ上は “customer”)です。
“customer”: “cus_xxxxxxxxxxxxxxxxxxx”,
こんな感じのデータです。
これは決済時に返却されるデータの中にありますのでそれを 購入情報に格納しておけばよいことになります。
このあたりは、定期課金をされている場合はすでになんとかしている前提で進みますが、簡易的にメールに記載しておくという方法もあるかもしれません。
メールに記載する例はこちらで紹介しています。ご参考までにどうぞ。
昨日アップした記事… こちらで課金した情報をあとで変更したくなるよな〜〜〜って思いますよね。 定期課金でクレジットカード変更したら… とか 住所変わったのにどうすりゃいいのさ… とか 実は購入者が調整できるような画面「カスタマーポータル」という機能があります!! もくじカスタマーポータル を付けてます…カスタマーポータ …
わすれちゃいけない そもそものカスタマーポータル設定
いきなりカスタマーポータルを使おうとするとこんなエラーメッセージが出ます。
You can’t create a portal session in test mode until you save your customer portal settings in test mode at https://dashboard.stripe.com/test/settings/billing/portal.
要するに、Stripe側でそもそもカスタマーポータルを使えるようにしてないよ!ということ。
設定 → カスタマーポータル
PHPでカスタマーポータルを表示するところのコード
今回用意したプログラムコードは PHP用のものになります。
API_KEY(APIキー) は Stripe管理画面の「開発者」→ APIキー → 標準キー → シークレットキー(本番キーまたはテストキーを表示ボタン押す) から取得できます。 sk_test_ 〜 はテストキー sk_live_ 〜 は本番キーになります。
このコードでは $_customer_id として カスタマーIDが入ればそれでも良いです。
今回わざわざ “charge” チャージID の方からカスタマーIDを出しています。
ものすごーく、いろいろな処理が省略されていますが、キモとなるのはこのくらいのコード量です。
途中にある require ‘./vendor/autoload.php’; の部分について説明します。
このプログラムファイルを customer_portal.php とすると下記のような階層に格納されているイメージです。
┬ customer_portal.php
└ vendor
├ autoload.php
├ composer/
└ stripe/
かなり部分的に書いてますが、この構成を作るために Composer でライブラリを取得してください。
Composer の使い方はこちらが参考になります。
Composerとは PHPのライブラリ管理ツールです。 ライブラリAを使用するためには、別のライブラリBを先にインストールする必要がある、なんてことがあります。 この時、ライブラリAはライブラリBに依存している、と言います。 ...
composer.json の内容は下記の通りです。
{
"require": {
"stripe/stripe-php": "7.*"
}
}
composer update でライブラリが取得されますので適宜配置してください。
カスタマーポータルのサンプル
こちらの画面からカスタマーポータルをご利用いただけます。
こちらに 取引ID ch_1J4xGvDoK5D4pRvXserd8aPs
登録したクレジットカードの下4桁 4242
を入れるとカスタマーポータルが立ち上がります。
今回のコードは $_charge_id = ‘〜〜〜どこかからもらう〜〜〜’; としていますが、この簡易版では
入力フォームから チャージIDを入力してもらっている感じになります。
本来はそれだけでカスタマーポータルを開けますが、なんとなくカードの下4桁でセキュリティを高めてみた…(甘すぎますが)次第です。
こちらのコードは下記のとおりです。
入力画面
ファイル名 cp.php
カスタマーポータルへ遷移するための処理ファイル
ファイル名 customer_portal.php
設定ファイル
ファイル名 config.php
ファイル構成
構成は下記のようになっています。
┬ customer_portal.php
├ config.php
├ cp.php
└ vendor
├ autoload.php
├ composer/
└ stripe/
まとめ
カスタマーポータルは定期課金を導入したいけど、定期課金はカードの変更や課金の中断・再開・終了なんかも面倒見ないといけないから工数がかかりそう・・・という場合にかなり重宝します。
定期課金の場合、実際は会員制にしないといろいろ面倒ですし(お客さんが チャージID持っているなど)もともとそういう機能が入っているカートなどをご利用であれば不要だと思います。
ただ、商品点数が少なくカートを運用するほどでもない場合や会員制の会員費などの徴収には大変便利なのではないかと思います。
弊社でも適材適所でご提案・導入支援していければと考えています。
サンプルコードは GitHub で取得できます
https://github.com/taman777/stripe_customer_portal_test
config-sample.php は 中身を適宜変更し config.php にリネームしてくださいね。