🔍

StripeのAPIキーからStripeアカウントを特定する方法

2024/12/12に公開

複数のStripeアカウントで開発や運用を行っていると、プロジェクトで利用しているAPIキーがどのStripeアカウントで利用しているものかがわからなくなることがあります。

この記事では、APIキーから対象のStripeアカウントを特定する方法を紹介します。

Checkout Sessionを利用して確認する

もっとも簡単な方法は、Checkout Sessionを利用することです。Checkout Sessionには、カード情報を保存するためのsetupモードが用意されています。setupモードでセッションを作成し、リダイレクトを行うAPIを実装しましょう。

app.get('/checkout', async c => {
  const stripe = new Stripe(STRIPE_SECRET_API_KEY)
  const session = await stripe.checkout.sessions.create({
    mode: 'setup',
    currency: 'jpy',
    success_url: 'https://example.com/success',
    cancel_url: 'https://example.com/cancel',
  });
  return c.redirect(session.url)
})

このAPIにアクセスすると、Stripeが用意する決済情報保存ページにリダイレクトされます。このページでは、Stripeアカウントの名前が表示されますので、ここに表示されたアカウント名を利用してどのStripeアカウントにて発行されたAPIかを確認できます。

ただしSandboxモードを利用している場合は、アカウント名ではなくサンドボックス名が表示されます。この場合はCheckout Sessionを利用してアカウントを特定することが難しくなります。

Invoiceの支払いURLからアカウントIDを取得する

もう1つの方法は、Invoiceを利用します。Invoiceで発行した請求書の支払いURLは、https://invoice.stripe.com/i/acct_xxxx/test_xxxxxというフォーマットで作られます。このうち、acct_xxxxが対象のStripeアカウントIDです。このIDを取得するため、請求書の支払いURLを取得するコードを作りましょう。

請求書の支払いURLを生成するには、顧客(customr)・請求書(invoice)そして請求明細(invoiceItem)の3つが必要です。Honoを使っている場合、次のコードで取得できます。

app.get('/test', async c => {
  const stripe = new Stripe(STRIPE_SECRET_API_KEY)
  const customer = await stripe.customers.create({
    email: 'test@example.com'
  })
  const invoice = await stripe.invoices.create({
    customer: customer.id,
    collection_method: 'send_invoice',
    days_until_due: 7
  })
  await stripe.invoiceItems.create({
    customer: customer.id,
    invoice: invoice.id,
    description: "test",
    currency: 'jpy',
    unit_amount: 1000,
    quantity: 1
  })
  
  const data = await stripe.invoices.finalizeInvoice(invoice.id)
  return c.text(data.hosted_invoice_url)
})

追加したAPIをcurlで呼び出してみましょう。先ほど紹介したフォーマットのURLがレスポンスで取得できます。

$ curl http://localhost:8787/test
"https://invoice.stripe.com/i/acct_xxxx/test_xxxxx"

あとは取得したアカウントIDを利用して、アカウント情報を取得しましょう。

const stripe = new Stripe(STRIPE_SECRET_API_KEY)
const account = await stripe.accounts.retrieve('acct_xxx')
console.log(account)

これでアカウントのプロフィール名やメールアドレスが特定できます。

{
  "id": "acct_xxx",
  "object": "account",
  "business_profile": {
    "annual_revenue": null,
    "estimated_worker_count": null,
    "mcc": null,
    "name": "Sandbox",
    ...
  },
  "email": "test@example.com",

まとめ

少し特殊な使い方ではありますが、プロジェクトに紐づけられたAPIキーがどのStripeアカウントで発行されたかを特定するために、Stripe API / SDKを利用できます。

アカウント名やID・メールアドレスの情報を取得することができれば、あとはStripeダッシュボードの設定ページサンドボックス管理画面にて該当のアカウントを特定しましょう。

Discussion