我正在尝试使用credit-card
更新StripeCheckout
,我看到另一个用户问了类似的问题here。
问题是我没有传递任何数量就无法复制会话对象,我做到了:
const domainURL = process.env.APP_DOMAIN;
let opts = {
payment_method_types: ["card"],
mode: 'setup',
success_url: `${domainURL}/pay/success?session_id={CHECKOUT_SESSION_ID}`,
cancel_url: `${domainURL}/pay/cancel`
};
// Make session
let session = await stripe.checkout.sessions.create(opts);
let url = `${domainURL}/pay/checkout-session?sessionId=${session.id}`;
return url;
上面的代码生成Stripe
会话的网址,并打开以下窗口:
因此,这似乎显然可行,但是当我单击“ Salva carta”保存卡时,会得到:
UnhandledPromiseRejectionWarning:错误:条带化:参数“ id”必须是字符串,但是得到了:null(在对
GET /customers/{id}
的API请求中)
我也尝试过:
let opts = {
payment_method_types: ["card"],
mode: 'setup',
setup_intent_data: {
metadata: {
'customer_id': 'customer id',
}
},
success_url: `${domainURL}/pay/success?session_id={CHECKOUT_SESSION_ID}`,
cancel_url: `${domainURL}/pay/cancel`
};
如here
所述但同样的问题
答案 0 :(得分:2)
我可以使用以下会话选项来解决此问题:
let opts = {
payment_method_types: ["card"],
mode: 'setup',
setup_intent_data: {
metadata: {
'customer_id': customerData.stripe_id,
}
},
success_url: `${domainURL}/pay/success?session_id={CHECKOUT_SESSION_ID}`,
cancel_url: `${domainURL}/pay/cancel`
};
// Create session
let session = await stripe.checkout.sessions.create(opts);
要基本上免费更新信用卡,必须使用customer_id
中的metadata
对象指定setup_intent_data
参数。
关于此的重要说明是会话mode
,实际上其值必须为setup
,希望这对某人有帮助。