Skip to main content

Blog

Stripe SDK(nodejs)でThrowされるErrorを自力でthrowする

Posted over 2 years ago
この記事をシェア:

なにいってるかわかんないかもですが、伝わる人には伝わるかなと。

やりたいこと

  • Stripe SDK経由でなにかしらのデータを取得したい
  • が、「特定の条件に合致しないもの」は、「取得しなかった扱い」にしたい
  • 後続処理では「StripeのAPIがデータを取得できなかった」ということにしたい
  • ので、Stripe SDKがなげるエラーを自分でなげたい

普通に使うと飛んでくるエラー

Stripe SDKは独自のエラーオブジェクトを投げてきます。

{
   type: 'StripeInvalidRequestError',
   raw: {
     code: 'resource_missing',
     doc_url: 'https://stripe.com/docs/error-codes/resource-missing',
     message: "No such customer: 'cus_XXXXXXX",
     param: 'id',
     type: 'invalid_request_error',
     headers: {
       server: 'nginx',
       date: 'Wed, 24 Mar 2021 10:33:45 GMT',
     },
     statusCode: 404,
     requestId: 'req_AAAAAAA'
   },
   rawType: 'invalid_request_error',
   code: 'resource_missing',
   doc_url: 'https://stripe.com/docs/error-codes/resource-missing',
   param: 'id',
....

TypeScriptの型定義では、Stripe.InvalidRequestErrorとかで参照できます。

Stripe.errorsでエラーオブジェクトを生成する

Stripe独自のエラーオブジェクトには、Stripe.errorsからアクセスできます。そのため、以下のようなコードを書くことでエラーを自分で投げることができます。

try {
  throw Stripe.errors.StripeInvalidRequestError.generate({
    code: 'resource_missing',
    message: "No such customer: 'cus_XXXXXXX",
    param: 'id',
    type: 'invalid_request_error',
    statusCode: 404,
  })
} catch (e) {
   console.log(e)
}

この場合、headersやrequestIdなどリクエストに関する情報がことごとくundefinedになることに注意しましょう。

type: 'StripeInvalidRequestError',
   raw: {
     code: 'resource_missing',
     message: "No such customer: 'cus_JXXXXX'",
     param: 'id',
     type: 'invalid_request_error',
     statusCode: 404
   },
   rawType: 'invalid_request_error',
   code: 'resource_missing',
   doc_url: undefined,
   param: 'id',
   detail: undefined,
   headers: undefined,
   requestId: undefined,
   statusCode: 404,
   charge: undefined,
   decline_code: undefined,
   payment_intent: undefined,
   payment_method: undefined,
   payment_method_type: undefined,
   setup_intent: undefined,
   source: undefined

coderawType、またはstatusCodeなどを使う場合に限って使える手法ですので、使い所には要注意です。

Tools to Support Stripe Development

We provide helpful tools to extend the Stripe Dashboard and streamline development and testing.

View All Tools

Support This Project

If you find this content helpful, consider supporting the project through GitHub Sponsors. Your support helps maintain and improve these tools.