Node.js集成Stripe时Apple Pay Token传递报错求助
解决Stripe集成Apple Pay时的令牌长度错误问题
错误原因
你当前代码把Apple Pay的原始支付令牌直接传给了card.token字段,但这个字段仅支持Stripe生成的Card Token,Apple Pay原始令牌长度远超该字段5000字符的限制;同时Stripe处理Apple Pay需要使用专门的apple_pay支付方式类型,而非card类型。
正确实现方式
直接将Apple Pay令牌传入payment_method_data的apple_pay字段,指定支付方式类型为apple_pay即可。以下是修正后的代码:
// 创建Payment Intent并直接确认Apple Pay支付 const paymentIntent = await stripe.paymentIntents.create({ amount: 1 * 100, currency: 'usd', payment_method_types: ['apple_pay'], // 改为Apple Pay专属类型 payment_method_data: { type: 'apple_pay', apple_pay: { token: req.body.AppleToken // Apple Pay原始令牌直接传入此处 } }, confirm: true // 一步完成创建与确认,减少接口调用 }); // 校验支付结果 if (paymentIntent.status === 'succeeded') { res.status(200).json({ success: true, message: 'Payment successful' }); } else { res.status(500).json({ success: false, error: 'Payment failed', detail: paymentIntent.last_payment_error?.message || 'Unknown error' }); }
可选拆分流程(创建与确认分离)
如果业务需要分开处理支付意向创建和确认,可采用以下方式:
// 1. 创建未确认的Payment Intent const paymentIntent = await stripe.paymentIntents.create({ amount: 1 * 100, currency: 'usd', payment_method_types: ['apple_pay'] }); // 2. 单独创建Apple Pay支付方式 const paymentMethod = await stripe.paymentMethods.create({ type: 'apple_pay', apple_pay: { token: req.body.AppleToken } }); // 3. 关联支付方式并确认支付 const paymentResult = await stripe.paymentIntents.confirm( paymentIntent.id, { payment_method: paymentMethod.id } ); // 后续结果校验逻辑同上
注意事项
- 确保客户端传递的Apple Pay令牌是完整的PKCS#7格式字符串,无截断或篡改。
内容的提问来源于stack exchange,提问作者Gaurav Mendhare
相关产品推荐
相关产品推荐

