先日書いた「Firebase + stripe + iOS」でクレジットカード決済機能を作るにおいて、
以下のようなワンタイムトークンを作るメソッドがあったのですが、
exports.createStripeEphemeralKeys = functions.https.onCall((data, context) => {
const customerId = data.customerId;
const stripe_version = data.stripe_version;
return stripe.ephemeralKeys
.create({
customer: customerId,
stripe_version: stripe_version
})
});
cloud functionsは一回のリクエストにも関わらず何回も実行することがあるという話を聞いて、安全のためにPassing Optionsに書いてあるidempotency_key
をつけることにしました。
以下のような感じ。
exports.createStripeEphemeralKeys = functions.https.onCall((data, context) => {
const customerId = data.customerId;
const stripe_version = data.stripe_version;
return stripe.ephemeralKeys
.create({
customer: customerId,
stripe_version: stripe_version
}, { idempotency_key: data.idempotencyKey })
});
そしたらstripeでエラーを吐くようになってしまいました。
慌ててidempotency_key
を外したりしてみたが、どうにもエラーがとまりませんでした。
結局
以下のような書き方で解決しました。Passing Optionsに関しては、createの2つ目の引数に書いた方がいいみたいです。(TypeScripte, node.jsの知識足りない)
exports.createStripeEphemeralKeys = functions.https.onCall((data, context) => {
const customerId = data.customerId;
const stripe_version = data.stripe_version;
return stripe.ephemeralKeys
.create({
customer: customerId
}, {
stripe_version: stripe_version,
idempotency_key: data.idempotencyKey
})
});
以上。