Stripe Dashboardのオブジェクトを構築するスクリプト作成Tips

◆ Live配信スケジュール ◆
サイオステクノロジーでは、Microsoft MVPの武井による「わかりみの深いシリーズ」など、定期的なLive配信を行っています。
⇒ 詳細スケジュールはこちらから
⇒ 見逃してしまった方はYoutubeチャンネルをご覧ください
【5/21開催】Azure OpenAI ServiceによるRAG実装ガイドを公開しました
生成AIを活用したユースケースで最も一番熱いと言われているRAGの実装ガイドを公開しました。そのガイドの紹介をおこなうイベントです!!
https://tech-lab.connpass.com/event/315703/

【5/27開催】事業変革を最新ソフトウェア技術で加速する「OSS利活用事例セミナー」
OSSのビジネス活用事例などを紹介します!登壇者はスカパー様やIPAなど🎤
OSSを活用した新たなビジネス創出やDX推進のヒントを得られる機会です。
https://ossforum.connpass.com/event/318583/
【6/19開催】Kong Community Japan Meetup #4
本イベントでは、Kong Inc. のVP of ProductであるReza Shafii氏もプレゼンターとして参加。当社からはアーキテクト マネージャーの槌野の登壇が決定!参加無料です!!
https://column.api-ecosystem.sios.jp/connect/kong/1081/

こんにちは、サイオステクノロジーの佐藤 陽です。
今回は決済処理のサービスを提供しているStripe社のAPIを利用し、
Stripeアカウントの商品や価格オブジェクトを一括生成するスクリプトを作成してみました。

はじめに

Stripeの肝となるオブジェクトとして、Product(製品)とPrice(価格)があります。
これはCustomer等のオブジェクトと異なり、実際にお客さんに使っていただく前に生成することが多いかと思います。

もちろん、Stripeのダッシュボードから手作業で追加することも可能です。
ただ、Stripeアカウントを切り替える場合や、テスト環境を作成する場合など
毎回追加するのは面倒ですし、ミスによって差分が発生することもあります。

また、Infrastructure as Codeの思想で行くと、ここもコードで管理したくなりますね。
ということで、今回はProductとPriceを一発で構築するようなシェルスクリプトを書いていきたいと思います。

環境

今回のスクリプトを実行する環境および必要なものです
  • WSL2(Ubuntu 20.04)
  • curl
  • jq
  • Stripe API(2022-08-01)
  • Stripe Secret Key

ゴール

今回は、スクリプトの実行によって以下のようなオブジェクトが作成されることをゴールとします。

APIの概要

Stripeは非常に丁寧なAPIドキュメントがあるので助かります。

Stripe API reference

今回はProductとPriceのAPIを使っていきます。
早速Productから作っていきましょう。
Create ProductのAPIが用意されており、サンプルコードも提供されています。
curl https://api.stripe.com/v1/products \
  -u {STRIPE_SECRET_KEY} \
  -d name="Gold Special"
基本的にパラメータを与えていけば問題なくAPIの実行が出来ますが
個人的に引っかかったポイントが3点あるので、ご紹介します。
  1. 認証方法
  2. Metadataの登録
  3. Child Parameterの利用

認証方法

サンプルコードでは-uオプションを使っていますが、こうした場合実行時にパスワードが聞かれます。

これに関してAPI DocumentのAuthenticationの項目にも記載があり

You do not need to provide a password.

と書いてあります。

ただ、入力が不要なのに毎回聞かれるのは気持ち悪いですよね。
そのため、Bearer認可を使った方法に切り替えます。
ヘッダーに“Authorization : Bearer {secret key}”を入れてあげればいいので
  -u {STRIPE_SECRET_KEY} \
  を
-H "Authorization: Bearer ${STRIPE_SECRET_KEY}" \

と変更します。

Metadata

Product作成時にMetadataを追加したいと思います。
特に難しいことは無いですが、渡し方に少し癖があり
  -d "metadata[author]"="SIOS TARO"
  -d "metadata[publisher]"="SIOS Technology"

といった感じで、配列の形を使ってパラメータを渡してあげましょう。

Child Parameter

APIに渡すパラメータのなかで、ChildParameterを持っているものもいくつかあります。
いわゆる入れ子型になっているパラメータです。

例えばProductであればdefault_price_dataとったパラメータがあり、
このパラメータを使う事で、Productに紐づくPriceを同時に作成することができます。

例えば、priceの請求間隔を指定するためには

default_price_data.recurring.interval

という2階層潜ったパラメータまで指定する必要があります。

この際のパラメータの引き渡し方としては
  -d "default_price_data[recurring][interval]"="month"

  こんな感じに書くことができます。
  配列で繋げていくことで深い階層に潜って行けるようです

定義されていないChild Parameter

先ほどdefault_price_dataを例に挙げてChild Parameterについて説明しましたが
続いて、同時作成するPriceにもMetadataを追加したいと思います。

ただ、ドキュメントを見るとChild Parameter内にMetadataの項目が見つかりません。

先ほどの流れで実装すると

  -d "default_price_data[metadata][interval]"="Month"

といった感じでメタデータを与えればできそうですが、
結論から言うと、できませんでした

実行してもStrip側からエラーが返ってきてしまったので
本来のObjectに含まれてるからといって、何でもかんでも設定できるわけではないようです。
(※全ての対して検証したわけではないので例外もあるかもしれないです。)

あとは、Productに対して2つ以上のPriceを作成したい場合もdefault_price_dataでは対応できなさそうですね。

なので、こういった場合は素直に

  1. Create ProductでProductを作成
  2. ProductのIdを使ってPriceを作成

という2段階のステップを踏むのがよさそうです。

スクリプトの作成

これまで書いたことを踏まえて、実際にスクリプトを書いてみます。

1つ注意する点として、curlのレスポンスからIdを取得する際、ダブルクォーテーション(“)が含まれています。
そのままPriceのAPIに投げるとエラーが起きるので、sedコマンドを使って取り除いてあげましょう!

また、意図的に統一感のない書き方をしているので、自分のケースにあった書き方を採用してみてください。
もっといい書き方あればぜひコメントで教えてください!

product_a

#Secret Keyを入力してください
STRIPE_SECRET_KEY=""

#ProductとPriceを同時に作成
curl https://api.stripe.com/v1/products \
  -H "Authorization: Bearer ${STRIPE_SECRET_KEY}" \
  -d name="product_a" \
  -d description="This is product_a" \
  -d "metadata[author]"="SIOS TARO" \
  -d "metadata[publisher]"="SIOS Technology" \
  -d "default_price_data[currency]"="JPY" \
  -d "default_price_data[unit_amount]"="3000" \
  -d "default_price_data[recurring][interval]"="month"

product_b

#Secret Keyを入力してください
STRIPE_SECRET_KEY=""

#Productを作成した後に、Id情報を使って各Priceを作成
productId=$(curl https://api.stripe.com/v1/products \
  -H "Authorization: Bearer ${STRIPE_SECRET_KEY}" \
  -d name="product_b" \
  -d description="This is product_b" \
  -d "metadata[author]"="SIOS HANAKO" \
  -d "metadata[publisher]"="SIOS Technology" | jq .id | sed 's/"//g')

curl https://api.stripe.com/v1/prices \
  -H "Authorization: Bearer ${STRIPE_SECRET_KEY}" \
  -d unit_amount=5000 \
  -d currency=jpy \
  -d "recurring[interval]"=month \
  -d product=$productId \
  -d "metadata[interval]"="month"

curl https://api.stripe.com/v1/prices \
  -H "Authorization: Bearer ${STRIPE_SECRET_KEY}" \
  -d unit_amount=50000 \
  -d currency=jpy \
  -d "recurring[interval]"=year \
  -d product=$productId \
  -d "metadata[interval]"="year"

スクリプト実行

あとは書いたスクリプトを実行するだけです。
source create.sh
といった感じでスクリプトを実行してあげれば、ProductとPriceが生成されます。

まとめ

今回はStripeのAPIを使ってスクリプトを書いてみました。
簡単なスクリプトを書くだけで、Stripeの環境が楽になり、コードでの管理もできるようになりました!
是非みなさんも試してみてください。
アバター画像
About 佐藤 陽 55 Articles
ロードバイクやトレランなど、走ることが好きなサーバーサイドエンジニア。組み込み系からWeb系へとジョブチェンジし、現在はAzureを使ったWebアプリの開発や、DevOpsの構築を行っています。
ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

1人がこの投稿は役に立ったと言っています。


ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!

Be the first to comment

Leave a Reply

Your email address will not be published.


*


質問はこちら 閉じる