Stripeで定期購読をキャンセルする方法
Stripeで定期購読(以下Subscription)をキャンセルする方法を紹介します。ここで使うコードはphpですがロジックがわかれば他の言語でも十分参考になると思います。
StripeでSubscriptionをキャンセルするために必要なのはsub_で始まる会員IDです。これはダッシュボードで下記のように確認できると思います。これは一人一人ユニークで唯一無二なものです。
上記のsub_で始まる会員IDを指定してSubscriptionのキャンセルを実行します。具体的には下記のように実行すればサブスクリプションが解除されます。
$sub = \Stripe\Subscription::retrieve("sub_CY38MZuhjsTtRc");
$sub->cancel();
echo $sub;
問題は、どうやって動的に会員IDを取得するかっていうこと。こういう方法はどうだろうか。サブスクリプションを作るときに、カスタマー情報を作ったと思うけれど、descriptionで使用したメールアドレスと、サブスクリプションを作るときに作られた上記の会員IDをデータベースに保存しておいて、会員解約のフォームでメールアドレスから、会員IDを取得して、メールアドレスと紐づいている会員 IDを特定、その会員 IDに対してSubscriptionのキャンセル処理を実行するっていうのは。メールアドレス+パスワードでもいい。問題はないのではないだろうか?例えば、下記のようにしてカスタマー情報と、サブスクリプションを作成していたとしたら
//======================================================================
// トークンの情報を元にカスタマー情報を作る
//======================================================================
kk = \Stripe\Customer::create(
array(
"description" => "フォームから受け取ったメールアドレス",
"source" => "$token_from_js", // カスタマー情報のトークン
)
);
//======================================================================
// カスタマー情報を元に月額支払いのサブスクリプションを作るって実行する
//======================================================================
$subscription = \Stripe\Subscription::create(
array(
"customer" => "$customer->id",
"items" => array( array("plan" => "id-test",), )
)
);
下記のようにしてメールアドレスと、カスタマーIDが取得できる。
//======================================================================
// 実行結果をechoで確認する
//======================================================================
echo $subscription->id;
echo $customer -> description;
上記の二つの変数をdbに保持しておけば、ユーザーが自分でサブスクリプションを解除できそうだ。