Open2
stripeでの決済方法手順について整理する
前提
- 下記のようなenvをstripeの管理画面から取得をしておく
NEXT_PUBLIC_STRIPE_KEY=pk_test_hogehogehoge
STRIPE_SECRET_API_KEY=sk_test_hogehogehoge
- 動作確認をするときは必ずtestモードのapikeyを使う
next.jsのapp routerのtrpcの構成で作っている。
stripeの決済でECシステムの単体での購入を想定。サブスクではない。
やること1、paymentintentを作って、client_secretをサーバーで発行をする。
client_secretがないとstripeのpaymentElementが表示できない。
export const resolver = async ({ ctx, input }: AuthProcedureArg<SecretStripeServerSchema>) => {
const { amount } = input
const user = await ctx.repository.user.findById(ctx.user.id)
if (user === null) {
throw new Error('ユーザー情報の取得に失敗しました。')
}
const paymentIntent = await ctx.stripe.paymentIntents.create({
amount: amount,
currency: 'jpy',
customer: user.customerId,
receipt_email: user.email,
})
return {
clientSecret: paymentIntent.client_secret,
}
}
その他のメモ
IntegrationError: stripe.confirmPayment(): do not pass setup_future_usage at confirm time. Instead, pass setup_future_usage when the PaymentIntent is created.
stripe.confirmPaymentにsetup_future_usageを直接渡すことができない。paymentIntentを作成するときにつけろと言われる。
ただ、決済情報を次回に使い回すかをユーザーに選択をさせるようにするにはどうしたらいいのか。
おそらくはpaymentIntentをupdateするのがいいのだろう。