Stripe APIを利用したシステムでは、Stripe APIのアップグレードだけでなく、呼び出し元のアプリの仕様変更やユーザーの意図しない操作などでAPIエラーが発生することがあります。
エラーへの対応は、SentryやRollbarを使ってリクエスト・レスポンスを調査するのが一般的ですが、実はStripeダッシュボードを利用することも可能です。
ダッシュボードからAPIログを確認する
ダッシュボードでは、[開発者]タブの[ログ]から、API呼び出しのログが確認できます。
APIのパスや呼び出し結果(成功・失敗など)、Connectの親アカウントか子アカウントかなどでフィルタリングできます。
ログの詳細画面では、「リクエストの本文(Body)」や「レスポンス」、「クエリパラメータ」・「呼び出し元のSDK・APIバージョン」などが確認できます。
顧客情報など、個人情報を含みやすいStripeのAPIリクエストのデバッグでは、Stripeダッシュボードのログ機能を使うと安全にデバッグが可能です。
SDK / APIレスポンスのrequest_log_url
で、システムのログからダッシュボードのログにアクセスする
とはいえ、サーバーやSentryなどのトラッカーに記録されたログとは別にStripeのログまで監視するのは少し手間がかかります。
そんな場合にお勧めしているのが、「APIエラーレスポンスに含まれる、request_log_url
パラメータを使う」ことです。
request_log_url
には、「https://dashboard.stripe.com/test/logs/req_xxxx
」のようなダッシュボードのログ詳細ページへのURLが含まれています。
このURLをエラートラッキングツールやSlack・メールの通知文に含めることで、「Stripe APIに関するエラー対応の時だけ、Stripeダッシュボードで詳細を確認する」ワークフローが実現できます。
JavaScript / TypeScriptで、エラーログURLを取得する方法
JavaScriptやTypeScriptで開発している場合、try catch
でAPIエラーを取得し、その中からデータを取り出します。
try {
await stripe.checkout.sessions.create({...})
} catch (error) {
console.log(error.raw.request_log_url)
}
TypeScriptの場合、Stripe.errors.StripeAPIError
型でもraw
はunknown
型が指定されていますので、TypeGuardやas any
などを利用します。
try {
await stripe.checkout.sessions.create({...})
} catch (error) {
console.log((error as any).raw.request_log_url)
}
SentryにコンテキストとしてURLを共有する
Sentryに通知する場合、以下のようにContextで送ることも可能です。
try {
await stripe.checkout.sessions.create({...})
} catch (error) {
Sentry.captureException(error, {
contexts: {
stripe_log_url: error.raw.request_log_url
},
});
}
[PR] Stripe開発者向け情報をQiitaにて配信中!
- [Stripe Updates]:開発者向けStripeアップデート紹介・解説
- ユースケース別のStripe製品や実装サンプルの紹介
- Stripeと外部サービス・OSSとの連携方法やTipsの紹介
- 初心者向けのチュートリアル(予定)
など、Stripeを利用してオンラインビジネスを始める方法について週に2〜3本ペースで更新中です。