You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 11:43:25