【Stripe】CHECKOUT_SESSION_IDからセッションオブジェクトを取得する

こんにちは、ryohei(@ityryohei)です!

本記事では、StripeのCHECKOUT_SESSION_IDからセッションオブジェクトを取得する方法をご紹介しています。

Stripeのsession_idからセッションオブジェクトを取得したいんだけど、どうすればいいんだろう?

上記の疑問にお答えします。Stripeは複数のプログラミング言語に対応していますが、本記事ではPHPを使用しています。

では、解説していきます。

Stripeの準備

Stripeをクライアントで使用するため、Stripeのライブラリをインストールしてインスタンスを生成します。インスタンス生成時に指定するStripeのシークレットキーはダッシュ―ボードから取得できます。

Striepライブラリをインストールする

composerでStripeのライブラリをインストールします。

composer require stripe/stripe-php

コマンド一発なので簡単にインストールできますね。

Stripeのインスタンスを生成する

Stripeライブラリがインストールできたら、Stripeを使用するファイルにライブラリ群を読み込み、インスタンスを生成します。

<?php

//ライブラリ読み込み
require 'vendor/autoload.php';

//シークレットキー
$seacret_key = 'sk_test_xxxxxxxxxx';

//インスタンス生成
$stripe = new \Stripe\StripeClient($seacret_key);

以上でStripeの準備は完了です。

CHECKOUT_SESSION_IDからセッションオブジェクトを取得する

StripeのCHECKOUT_SESSION_IDからセッションオブジェクトを取得します。セッションオブジェクトはStripeClientretrieveメソッドで取得できます。

Stripeの決済後、下記のページにリダイレクトされた場合を想定します。

https://localhost/stripe/thanks/?session_id=cs_test_xxxxxxxxxx

クエリ文字列のsession_idの値からセッションオブジェクトを取得します。

<?php

//ライブラリ読み込み
require 'vendor/autoload.php';

//シークレットキー
$seacret_key = 'sk_test_xxxxxxxxxx';

//インスタンス生成
$stripe = new \Stripe\StripeClient($seacret_key);

//CHECKOUT_SESSION_ID得
$id = $_GET['sesssion_id'];

//セッションオブジェクト取得
$session = $stripe->checkout->sessions->retrieve($id);

取得したセッションオブジェクトは下記のような情報を持っています。

Session Object

object(Stripe\Checkout\Session)#5055 (40) {
  ["id"]=>
  string(66) "cs_test_xxxxxxxxxx"
  ["object"]=>
  string(16) "checkout.session"
  ["after_expiration"]=>
  NULL
  ["allow_promotion_codes"]=>
  bool(false)
  ["amount_subtotal"]=>
  int(1000)
  ["amount_total"]=>
  int(1000)
  ["automatic_tax"]=>
  object(Stripe\StripeObject)#5060 (2) {
    ["enabled"]=>
    bool(false)
    ["status"]=>
    NULL
  }
  ["billing_address_collection"]=>
  string(4) "auto"
  ["cancel_url"]=>
  string(18) "https://stripe.com"
  ["client_reference_id"]=>
  NULL
  ["consent"]=>
  NULL
  ["consent_collection"]=>
  NULL
  ["currency"]=>
  string(3) "jpy"
  ["customer"]=>
  NULL
  ["customer_creation"]=>
  string(11) "if_required"
  ["customer_details"]=>
  object(Stripe\StripeObject)#5061 (6) {
    ["address"]=>
    object(Stripe\StripeObject)#5069 (6) {
      ["city"]=>
      NULL
      ["country"]=>
      string(2) "JP"
      ["line1"]=>
      NULL
      ["line2"]=>
      NULL
      ["postal_code"]=>
      NULL
      ["state"]=>
      NULL
    }
    ["email"]=>
    string(21) "taro.tanaka@example.com"
    ["name"]=>
    string(15) "TARO TANAKA"
    ["phone"]=>
    NULL
    ["tax_exempt"]=>
    string(4) "none"
    ["tax_ids"]=>
    array(0) {
    }
  }
  ["customer_email"]=>
  NULL
  ["expires_at"]=>
  int(1649652544)
  ["livemode"]=>
  bool(false)
  ["locale"]=>
  string(4) "auto"
  ["metadata"]=>
  object(Stripe\StripeObject)#5065 (0) {
  }
  ["mode"]=>
  string(7) "payment"
  ["payment_intent"]=>
  string(27) "pi_xxxxxxxxxx"
  ["payment_link"]=>
  string(30) "plink_xxxxxxxxxx"
  ["payment_method_options"]=>
  array(0) {
  }
  ["payment_method_types"]=>
  array(1) {
    [0]=>
    string(4) "card"
  }
  ["payment_status"]=>
  string(4) "paid"
  ["phone_number_collection"]=>
  object(Stripe\StripeObject)#5070 (1) {
    ["enabled"]=>
    bool(false)
  }
  ["recovered_from"]=>
  NULL
  ["setup_intent"]=>
  NULL
  ["shipping"]=>
  NULL
  ["shipping_address_collection"]=>
  NULL
  ["shipping_options"]=>
  array(0) {
  }
  ["shipping_rate"]=>
  NULL
  ["status"]=>
  string(8) "complete"
  ["submit_type"]=>
  string(4) "auto"
  ["subscription"]=>
  NULL
  ["success_url"]=>
  string(18) "https://stripe.com"
  ["total_details"]=>
  object(Stripe\StripeObject)#5077 (3) {
    ["amount_discount"]=>
    int(0)
    ["amount_shipping"]=>
    int(0)
    ["amount_tax"]=>
    int(0)
  }
  ["url"]=>
  NULL
}

セッションオブジェクトは多くの情報を持っています。DB等の処理で使用される名前やメールアドレス、合計金額等のプロパティは下記のようにアクセス取得できます。

//名前
$session->customer_details->name

//メールアドレス
$session->customer_details->email,

//小計
$session->amount_subtotal;

//合計
$session->amount_total;

参考:https://stripe.com/docs/api/checkout/sessions

最後に

Stripeで簡単に決済フォームを作成することができるStripe Checkoutは、サンクスページにリダイレクトする形で自前のWEBサイトにsession_idを渡すことができます。そのため決済完了→独自のシステムを実行という処理が構築しやすかったです。Stripe Elementsを使って独自のフォームに組み込むこともできるので、案件の内容や予算に応じて決済フォームを使い分けできるのもStripeの魅力。また決済が必要な案件に携わる機会があれば使わせてもらおうと思います。

以上、StripeでCHECKOUT_SESSION_IDからセッションオブジェクトを取得する方法の

Adobe Creative Cloudを通常価格で購入していませんか?

Adobe Creative Cloud(Adobe CC)はAdobe社が提供するクリエイター向けのサービスです。WEB制作の幅を広げる「Photoshop・Illustrator・XD」Youtuberや動画クリエイターの編集作業に欠かせない「Premiere Pro・After Effects」など全20以上のアプリが提供されており、幅広いプランが用意されています。

コンプリートプランはAdobe CCの全20以上のアプリが使用できるプランです。多くのアプリが使用できるため定価で購入すると年間7万円以上するプランですが、デジタルハリウッドのAdobeマスター講座では「基礎動画教材+Adobe CC コンプリートプラン(12ヵ月)」がセットになって39,980円(税込)で利用できます。定価より安価にAdobe Creative Cloudのライセンスを購入でき、以降のライセンス更新も可能。動画教材で基礎スキルを習得できるので、入門する方にも便利な講座です。詳しくは下記のリンクからチェックしてみてくださいね。

Adobeマスター講座はこちら

おすすめの書籍