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