Laravel ✖️ Stripe で商品、料金の作成をする
こんにちは!
ソーシャルデータバンク株式会社で長期インターンをしている hiro です。
まだチーム開発を始めて半年程度ですが、ブログを書ける機会をいただいたので、日々の開発で学んだことについて発信したいと思います!
先日、Laravel で開発中のサービスにおいて、Stripe の chackout 機能を利用したいという要望がありました。その中で、商品の作成、価格の設定もアプリ上で行えるようにして欲しいとの依頼があり、機能開発を行いました。
web アプリの詳細についてはこちら↓
そこで、Stripe API を利用した商品 ( Product )、料金 ( Price )の作成方法について紹介したいと思います!
Stripe の API リファレンスを参考にしていますので、より詳細な情報をお求めの方はStripeの公式ドキュメントをご覧ください。
この記事のゴール
✅ Stripe APIを利用して、商品 ( Product )、料金 ( Price )を作成、編集や取得をする。
シークレットキーの認証
環境構築については省略します。
以下の記事が参考になると思います!
Stripe API を利用するための最初のステップは、シークレットキーでの認証です。私たちのアプリケーションでは、 StripeService クラスを介してすべての決済関連のロジックを処理しています。
はじめに、シークレットキーの Authentication を行います。これは Stripe の API を利用する際に必要となります。
use Stripe\StripeClient;
class StripeService
{
protected $stripe;
public function __construct($secret_key)
{
try{
$this->stripe = new StripeClient($secret_key);
} catch {
//例外処理
}
}
}
商品(Product)
商品 ( Product ) については、Stripe API 上で以下の機能がサポートされています。
Create | 作成 |
Update | 更新 |
Retrieve | 特定の商品データの取得 |
All | 全商品データの取得 |
Delete | 削除 |
Search | 検索 |
Create
商品の作成に必須となるのは、商品名を表す ”name” のみです。
シンプルでありながら、アプリケーションのニーズに合わせてカスタマイズ可能な機能です。以下のメソッドは、新しい商品を作成するための基本的なロジックを示しています。
public function createProduct($options = [])
{
$productData = [
// 顧客に表示される商品名
'name' => $options['name'],
// 商品が現在購入可能かどうか。デフォルトはtrue
'active' => $options['active'] ?? true,
// 顧客に表示される商品説明。
'description' => $options['description'],
// オブジェクトに添付可能なキーと値のペアセット。
'metadata' => $options['metadata'] ?? [],
// この商品の最大8つの画像URLリスト。顧客に表示用
'images' => $options['images'] ?? [],
];
return $this->stripe->products->create($productData);
}
レスポンスは以下の通りとなります( $options['name'] が Gold Plan の場合)
"id" は商品を一意に定める識別子となり、Update、Retrieve や Delete において必要となるので覚えておきましょう。
なお、応答は以下の通りとなり、Stripe 開発者画面からもLogを確認できます。
他の機能についても以下に紹介します。
Update
商品の情報の更新
public function updateProduct($product_id, $name)
{
return $this->stripe->products->update($product_id,['name' => $name]);
}
Retrieve
product idを利用した特定の商品の取得
public function retrieveProduct($product_id)
{
return $this->stripe->products->retrieve($product_id, []);
}
All
全商品データの取得
public function allProduct()
{
return $this->stripe->products->all();
}
Delete
商品の削除
その商品に価格が関連付けられていない場合にのみ可能です。
public function retrieveProduct($product_id)
{
return $this->stripe->products->delete($product_id, []);
}
Search
商品の検索
検索クエリ言語を使用することで、既存の商品の作成が可能です。
public function searchProduct()
{
return $this->stripe->products->search([
'query' => 'active:\'true\' AND metadata[\'order_id\']:\'6735\'',
]);
}
料金(Price)
料金 ( Price ) は、以下の機能がサポートされています。
Create | 作成 |
Update | 更新 |
Retrieve | 特定の料金データの取得 |
All | 全料金データの取得 |
Search | 検索 |
料金は商品と違い、API 上で削除できません。(作成済の料金を使用したくない場合は、 active 属性を false にすることで対応できます。)
基本的なコードは商品とほとんど一緒なので、ここでは Create のみ紹介します。
public function createPrice($options = [])
{
$price_data = [
// 通貨を表す3文字のISOコード(小文字)。デフォルトは 'jpy'
'currency' => $options['currency'] ?? 'jpy',
// 商品の識別ID
'product' => $options['product_id'],
// 金額
'unit_amount' => $options['unit_amount'],
];
return $this->stripe->prices->create($price_data);
}
product_id を指定することで、料金を商品に紐づけることが可能になります。
まとめ
この記事では、Laravel アプリケーションで Stripe API を使用して商品と料金を作成、管理する方法について簡単に紹介しました。
Stripe API のドキュメントは非常にわかりやすく、丁寧にまとまっています。もし更に知りたい場合は、Stripeの公式ドキュメントを参照してください!
Discussion