勉強したことのメモ

webプログラマが勉強したことのメモ。

PHPとStripeで定額課金(サブスクリプション)実装

   

PHPとStripeで1ヶ月ごとに500円でサイト内のサービスを使い放題のようなサブスクリプション機能を実装したかった。以下に方法のメモ。

Stripeの導入

Stripeのアカウント作成やライブラリのインストールは過去記事を参照。

 

商品(コース)の作成

Stripeのダッシュボードにログインし「商品」→「商品を追加」→「商品を保存」の順に進み、商品(コース)を作成する。今回はテストのため、1日ごとに500円の決済が発生する商品を作成した。

尚、商品を作成すると「price_」から始まるAPI IDと「prod_」から始まるIDが発行され、今回必要なのはAPI IDになる。

 

決済処理

決済ページ(HTML)

商品名や料金説明等は適宜追記する。

 

決済処理ページ(PHP)

決済日時、メールアドレス、「sub_」から始まるsubsctiprionIDをMySQLなどに適宜格納しておく。特にsubsctiprionIDは必須。

 

解約処理

解約処理ページ(PHP)

 

別の実装方法

決済までであればもっと簡単な実装方法もある。Stripeのダッシュボードにログインし「設定」→「Payments内にあるCheckoutの設定」→「Checkout クライアント専用組み込みを有効」→「許可」→「ドメインを入力して保存」と進む。

さらに「商品」→「料金体系の…となっているメニュー部分」→「checkoutのコードスニペットを取得」→「成功時のURLとキャンセル時のURLを入力して保存」とする。最後のURLを入力するダイアログでJavaScriptのタグが表示されるのでそのタグを決済ページに貼り付けるだけで良い。

ただ、この方法だとsubsctiprionIDの取得方法が分からなかった。そうすると解約もどうすればいいのか分からない。「テスト用クレカ&実在するメアド」で登録テストしてみたものの確認メールのようなものは届かなかった。

 

その他

正常に定額決済に登録されているか確認する方法

Stripeのダッシュボードにログインし「顧客」メニューを開くと登録されているユーザーが一覧表示される。

またユーザー部分をクリックすると詳細が表示され、どのコースに登録されているか等が確認できる。

できれば「商品」→「詳細」を開いた際にも該当商品に登録しているユーザーが見られればありがたいが、そのような項目は見受けられなかった。

 

subsctiprionIDの確認方法

Stripeのダッシュボードにログインし「顧客」→「適当なユーザーを選択」→「支払い部分を選択」するとページ下部に「イベントとログ」という表示欄があり、イベントデータの中に「sub_」から始まるsubsctiprionIDが確認できる。

ただ、イベントデータはデフォルトでは省略されており「○行すべてを表示する」ボタンをクリックしないと確認できなかったので注意する。

 

所感

定額決済だと単発決済とは違って解約が発生する為、subsctiprionIDは必須として入会日や更新日などもデータベースに残しておく必要がありそうでまあ色々面倒くさそう。また、例えばだが「今月入会した場合は○%割引」「解約しても更新予定日までは使用可能」等、色々柔軟に対応できるみたいだがこれも実装するのは大変そうである。できれば単発決済のみが良いなぁとは思うものの、恐らくは需要がある決済方法だと考えられるため最低限の部分は今回メモした方法で乗り切りたいところ。

 

参考サイト

https://qiita.com/azukiazusa/items/584d69a373214769880c

 - PHP

  関連記事

CodeIgniterでログをファイルに出力する

Codeigniterで何らかのエラーが発生した際に分かりやすい形でファイルに情 ...

PHPでステータスコードを取得する方法

サーバーの死活監視でUptimeRobotを使っていたけど、どうも正常に監視して ...

PHPでベーシック認証をかける方法

PHPでBasic認証をかけているソースを拝見する機会があり、衝撃だったのでメモ ...

PHPのclassを用いてBBS作成

オブジェクト指向勉強中のメモ。 ■index.php <? error_r ...

PHPで日付の比較

以前に「締切日を設けて、今日の日付と比較して分岐させる」というもので 日付の比較 ...

Ajaxでデータを受信した際にリファラのチェックをしたい

Ajaxでデータを受信し、MySQLにINSERTするプログラムがあった。そこま ...

他サーバーにある画像をPHPで取得して保存する方法

他サーバーにある画像をURLで指定して、PHPで取得して保存する方法のメモ。 フ ...

画像をアップロードすると複数サムネイルを生成する方法

フォームで画像をアップロードすると、予め定めておいた大中小のサイズでサムネイル画 ...

さくらvpsでPHPのエラーログ設定

PHPのエラーログを設定した際のメモ。 vi /etc/php.ini で設定フ ...

CRUDのfunction化(処理ページ)

<?php //エスケープ用htmlspecialchars functi ...