質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Stripe

Stripeとは、米国のオンライン決済システム提供企業、及び同社が提供する決裁システムを指します。Webサイトやモバイルアプリにコードを組み込むことでクレジットカードなどの決済サービスが簡潔に追加できます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Q&A

0回答

912閲覧

Stripe決済 リクエストが失敗する

kobayashiteppei

総合スコア1

Stripe

Stripeとは、米国のオンライン決済システム提供企業、及び同社が提供する決裁システムを指します。Webサイトやモバイルアプリにコードを組み込むことでクレジットカードなどの決済サービスが簡潔に追加できます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

0グッド

1クリップ

投稿2021/03/06 06:52

Stripeによって決済機能を実装しようとしています。しかし以下のサーバーに対するリクエストが失敗します。

Node

1import stripe from "../../../../lib/stripe"; 2 3export default async (req, res) => { 4 try { 5 //itemオブジェクト 6 // { 7 // name: "キノコのかさ", 8 // price: 100, 9 // } 10 const item = req.body.item; 11 // 店舗のID 12 const stripeConnectedAccountId = req.query.id; 13 // 顧客のID 14 const customerId = req.body.customer_id; 15 16 // 顧客のカードの登録情報を取得(複数のカードが登録されている場合は、複数件のカード情報をする) 17 const paymentMethodData = await stripe.paymentMethods.list({ 18 customer: customerId, 19 type: "card", 20 }); 21 22 // 店舗毎に顧客と支払い情報を登録する必要がある 23 // 参考:https://stripe.com/docs/payments/payment-methods/connect#cloning-payment-methods 24 25 // 店舗毎(stripeConnectedAccountId)にクレジットカード情報(payment_method)を複製 26 const clonedPaymentMethod = await stripe.paymentMethods.create( 27 { 28 customer: customerId, 29 payment_method: paymentMethodData.data[0].id, 30 }, 31 { 32 stripeAccount: stripeConnectedAccountId, 33 } 34 ); 35 36 // 店舗毎(stripeConnectedAccountId)に顧客情報を複製(customer))を複製 37 const clonedCustomer = await stripe.customers.create( 38 { 39 payment_method: clonedPaymentMethod.id, 40 }, 41 { 42 stripeAccount: stripeConnectedAccountId, 43 } 44 ); 45 46 // 上記の複製したpayment_methodとaccountを使用し、支払いのためのセットアップを行う 47 // intentは支払いフローを定義するオブジェクト 48 const paymentIntent = await stripe.paymentIntents.create( 49 { 50 amount: item.price, 51 currency: "jpy", 52 payment_method_types: ["card"], 53 payment_method: clonedPaymentMethod.id, 54 customer: clonedCustomer.id, 55 description: `${item.name}の購入代金`, 56 metadata: { name: item.name, price: item.price }, 57 }, 58 { 59 stripeAccount: stripeConnectedAccountId, 60 } 61 ); 62 63 // 支払い処理自体はブラウザから行う必要があるため、決済に必要なキー(client_secret)をフロントに渡す 64 // intentのsecretをクライアントがstripeに送るとintentが実行される 65 res.statusCode = 201; 66 res.json({ 67 client_secret: String(paymentIntent.client_secret), 68 }); 69 } catch (err) { 70 console.error(err); 71 res.status(500).send({ 72 error: err.message, 73 }); 74 } 75}; 76

何か問題ありますでしょうか?
情報が足りないとあれば追記します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問