こんにちは、サイオステクノロジーの佐藤 陽です。
今回はStripeのオブジェクトを一意に定めるURLを生成するTipsについてご紹介します。
はじめに
Stripeには様々なオブジェクトが存在しています。
- Customer
- Product
- Price
そしてこれらにはそれぞれIdが割り振られています。
Customerであればcus_から始まる文字列 (ex.cus_OXiogDTwh6lVNi)
Productであればprod_から始まる文字列 (ex.prod_OByvfvU5HVaLcK)
といった形です。
また、StripeDashboard上で見た場合、各ObjectページのURLにもこのIdが含まれています。
アプリを運用していくうえで、このURLを使う事もありそうです。
例:
https://dashboard.stripe.com/test/customers/cus_OXiogDTwh6lANi
今回はこのObjectを表すIdやURLについて調べてみました。
ObjectId
一意性
Objectによってアンダーバー(_)以降の文字列の長さは異なりますが、UUIDのようなUniqueさが保証されているようにも見えません。
この点調査すると、以下のようになっているようです。
- Stripeのアカウント内では一意であることは保証されている
- Stripeのアカウントをまたいだ場合はその限りではない
つまり複数のStripeアカウントを運用している場合、同じIdが割り振られるCustomerObjectが作成される可能性があります。(確率は非常に低いようです。)
URL
ではこのように同じCustomerIdが割り振られている状況で、同じCustomerを表すURLへ遷移した場合はどうなるでしょうか?
同じIdを持つCustomerを作成することが難しかったため、仮説を交えた状況ではありますが、検証してみました。
今2つのStripeアカウントを用意しました。
- Stripe Account A
- Stripe Account B
それぞれにCustomerを作成しました。
Account A : cus_OXk1Jp56d8qexX
Account B : cus_OXk0HfvL7WOWSQ
この時、検証内容として
- StripeDashboard上ではAccountAを表示させておく
- ブラウザ上で Account BのCustomerを指すURLへと遷移する
https://dashboard.stripe.com/test/customers/cus_OXk0HfvL7WOWSQ
とすると、自動でアカウントがBの方へ切り替わり、cus_OXk0HfvL7WOWSQのページへと遷移しました。
ここからも分かるに、自分のStripeのID(=StripeにログインするためのアカウントのID)に紐づいているAccountの中から、紐づくObjectを探索し、該当するObjectを自動で表示してくれているようです。
疑問
例えばStripeアカウントが3つあって、それぞれに以下のようなCustomerが居たとします。
Account A : cus_OXk1Jp56d8qexX
Account B : cus_OXk0HfvL7WOWSQ
Account C : cus_OXk0HfvL7WOWSQ
StripeDashboardでAccount Aで開いている状態で、cus_OXk0HfvL7WOWSQを示すURLへ遷移した場合、B,CどちらのAccountのCustomerが表示されるのでしょうか?
…と、そんな重箱の隅をつつくような検証をしていてもしょうがないので、解決策を示します。
解決策
URLのパスでAccountを指定することが可能です。
こうすることで、一意にObjectを指定できます。
http://dashboard.stripe.com/b/{accountId}?destination=/test/customers/{customerId}
なおこのAccountIdに関しては、StripeDashboardのプロフィールページから確認できます。
ちなみに例ではCustomerのURLを示しましたが、customersの部分をproducts等に変えても動作確認できました。(全てを試したわけではないです)
また、誤ったアカウント名や、存在しないObjectIdを与えた場合は以下のようにエラー画面が現れることも確認できました。
注意点
このパス指定の方法、実はStripeの方に教えていただいたのですが
恐らくドキュメントにも書かれていない(?)ようにも見え、今後仕様変更になる可能性もゼロではないかと思います。
そのあたり念頭に入れていただけると幸いです。
まとめ
今回はStripeのオブジェクトを一意に定めるURLの生成方法をご紹介しました。
アカウントを越えた場合は、ユニークなIDと確実には言えないため、アカウントを指定して明示的に一意なURLを生成しましょう。
ではまた!