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

なにいってるかわかんないかもですが、伝わる人には伝わるかなと。 やりたいこと Stripe SDK経由でなにかしらのデータを取得したい が、「特定の条件に合致しないもの」は、「取得しなかった扱い」にしたい 後続処理では「 […]

広告ここから
広告ここまで

目次

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

    やりたいこと

    • 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などを使う場合に限って使える手法ですので、使い所には要注意です。

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark