【Stripe】Objectを一意に定めるURL生成Tips

◆ Live配信スケジュール ◆
サイオステクノロジーでは、Microsoft MVPの武井による「わかりみの深いシリーズ」など、定期的なLive配信を行っています。
⇒ 詳細スケジュールはこちらから
⇒ 見逃してしまった方はYoutubeチャンネルをご覧ください
【6/19開催】Kong Community Japan Meetup #4
本イベントでは、Kong Inc. のVP of ProductであるReza Shafii氏もプレゼンターとして参加。当社からはアーキテクト マネージャーの槌野の登壇が決定!参加無料です!!
https://column.api-ecosystem.sios.jp/connect/kong/1081/

【6/21開催】開発者目線でのSBOMとの向き合い方
SBOMの導入から開発者がSBOMの作成・管理を自動で行っていくための方法(デモ)を紹介します。SBOMを全く知らない人から、開発との統合までを紹介するので様々なレベルの方に学びがあるライブとなる予定です!
https://tech-lab.connpass.com/event/321422/

【7/19開催】現場で役立つAzure神小技10+α 〜生成AI,RAG,コスト削減など旬な技術満載のLT大会〜
Azureの最新技術や実用的な小技を紹介する特別なライトニングトーク大会を開催します!
https://tech-lab.connpass.com/event/319077/

【7/26開催】最適なIaCツールを選ぼう
プロジェクトでのツール選びに困らないための重要な観点をご説明します!
https://tech-lab.connpass.com/event/319532/

こんにちは、サイオステクノロジーの佐藤 陽です。
今回は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

この時、検証内容として

  1. StripeDashboard上ではAccountAを表示させておく
  2. ブラウザ上で 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を生成しましょう。

ではまた!

アバター画像
About 佐藤 陽 57 Articles
ロードバイクやランニングなど、走ることが好きなサーバーサイドエンジニア。組み込み系からWeb系へとジョブチェンジし、現在はAzureを使ったWebアプリの開発や、DevOpsの構築を行っています。
ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

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

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


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



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

Be the first to comment

Leave a Reply

Your email address will not be published.


*


質問はこちら 閉じる