👋

Laravel ✖️ Stripe で商品、料金の作成をする

2024/02/16に公開

こんにちは!
ソーシャルデータバンク株式会社で長期インターンをしている hiro です。
まだチーム開発を始めて半年程度ですが、ブログを書ける機会をいただいたので、日々の開発で学んだことについて発信したいと思います!

先日、Laravel で開発中のサービスにおいて、Stripe の chackout 機能を利用したいという要望がありました。その中で、商品の作成、価格の設定もアプリ上で行えるようにして欲しいとの依頼があり、機能開発を行いました。

web アプリの詳細についてはこちら↓
https://zenn.dev/sdb_blog/articles/5e123d9696cc7b

そこで、Stripe API を利用した商品 ( Product )、料金 ( Price )の作成方法について紹介したいと思います!
Stripe の API リファレンスを参考にしていますので、より詳細な情報をお求めの方はStripeの公式ドキュメントをご覧ください。

この記事のゴール

✅ Stripe APIを利用して、商品 ( Product )、料金 ( Price )を作成、編集や取得をする。

シークレットキーの認証

環境構築については省略します。
以下の記事が参考になると思います!
https://juno-engineer.com/article/laravel-stripe/

Stripe API を利用するための最初のステップは、シークレットキーでの認証です。私たちのアプリケーションでは、 StripeService クラスを介してすべての決済関連のロジックを処理しています。
はじめに、シークレットキーの Authentication を行います。これは Stripe の API を利用する際に必要となります。

StripeService.php
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” のみです。
シンプルでありながら、アプリケーションのニーズに合わせてカスタマイズ可能な機能です。以下のメソッドは、新しい商品を作成するための基本的なロジックを示しています。

StripeService.php
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
商品の情報の更新

StripeService.php
    public function updateProduct($product_id, $name)
    {
        return $this->stripe->products->update($product_id,['name' => $name]);
    }

Retrieve
product idを利用した特定の商品の取得

StripeService.php
    public function retrieveProduct($product_id)
    {
        return $this->stripe->products->retrieve($product_id, []);
    }

All
全商品データの取得

StripeService.php
    public function allProduct()
    {
        return $this->stripe->products->all();
    }

Delete
商品の削除
その商品に価格が関連付けられていない場合にのみ可能です。

StripeService.php
    public function retrieveProduct($product_id)
    {
        return $this->stripe->products->delete($product_id, []);
    }

Search
商品の検索
検索クエリ言語を使用することで、既存の商品の作成が可能です。

StripeService.php
    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 のみ紹介します。

StripeService.php
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