会員管理プラグイン『Simple Membership』を使用しているサイトにStripeのカスタマーポータルの導入した話
目次
参考文献
https://example.com/customer-portal/ という固定ページを作成する
WPの管理画面から固定ページを作成してください。
Customer Idの取得
Subscription Id から取得する方法とメールアドレスから取得する方法等がありますが、
WordPressにメールアドレスが複数登録されていなくても、Stripeにはメールアドレスが複数登録されている場合があります。そのため、Subscription Idから取得するのが一般的です。
$stripe の定義
$stripe = new \Stripe\StripeClient(
'sk_live_****************'
);
Subscription Idから取得する
//ログインユーザーのIDを取得してsubscriptionIDからCustomerIdを取得する
$member_id = SwpmMemberUtils::get_logged_in_members_id();
$subscr_id = SwpmMemberUtils::get_member_field_by_id( $member_id, 'subscr_id' );
$useSubscription = $stripe->subscriptions->retrieve($subscr_id);
$customer_id = $useSubscription['customer'];
取得したCustomer Id から、カスタマーポータルのURLを発行する。
$session = $stripe->billingPortal->sessions->create([
'customer' => $customer_id,
'return_url' => home_URL(),
]);
取得した $Session から、カスタマーポータルのURLへリダイレクトする。
header("Location: " . $session->url);
ボタンの設置
好きなページ (*ログインしていないと見れないページにした方が良いです。)
に『カード情報の更新はこちら』のようなボタンを設置し、
リンク先を https://example.com/customer-portal/ に設定する
これでカスタマーポータルのページに自動的に遷移されるようになります。
諸注意
・Stripeの導入方法等は省いております。
・カスタマーポータルのURLが取得できなかった場合用のページを設定するのがおすすめです。
「
お客様は本ページからクレジットカードの変更はできません。
誠に恐れ入りますが、一度お問い合わせをお願いいたします。
」等
1, Subscription Idで取得した場合に正しいカスタマーポータルのURLが取得できない場合は、会員期限が切れていてもログインできる場合などで発生しうる可能性が考えられます。(または、データの整合性が一致していない場合等)
2, メールアドレスで取得した場合は、正しいカスタマーポータルのURLが取得できない場合があります。 (メールアドレスの重複登録等)
終わりに
先月、カスタマーポータルがノーコードで実装できるようになりました。
衝撃でした。。。。
しかし、メール認証等が発生するため、
既に会員サイト等を運用されている方のために、
今回公開することにしてみました。
多くの人のお役に立てることを願っております。