集成Stripe与ApplePay时遇payment_method_data[card]缺失错误求助
问题原因及解决方案
核心问题:传递了STPToken对象而非token字符串ID
你遇到的错误是因为代码中传递给card.token的是STPToken对象,而Stripe API需要的是token的字符串ID(格式如tok_xxx)。STPToken是Stripe iOS SDK封装的对象,它包含id(或旧版的tokenId)属性,才是API要求的有效参数值。
修复步骤
替换代码中的
token为STPToken对象的ID属性:amount: amount, // e.g., 1000 = $10.00 (initial estimate) currency: 'usd', payment_method_data: { type: 'card', card: { token: token.id }, // 用token.id而非token对象本身 },注:若使用旧版Stripe iOS SDK,需替换为
token.tokenId。额外验证点:
- 确认Apple Pay流程中成功获取到有效STPToken,无空值或异常状态
- 可在Stripe后台「测试数据」中查看该token是否存在
推荐替代方案:直接使用PaymentMethod
新集成流程更建议先通过Apple Pay创建PaymentMethod,再关联到PaymentIntent,逻辑更清晰:
// 1. 创建PaymentMethod const paymentMethod = await stripe.paymentMethods.create({ type: 'card', card: { token: token.id }, }); // 2. 创建并关联PaymentIntent const paymentIntent = await stripe.paymentIntents.create({ amount: amount, currency: 'usd', payment_method: paymentMethod.id, confirm: true, // 根据业务需求决定是否直接确认支付 });
内容的提问来源于stack exchange,提问作者Mike Smithwick
相关产品推荐
相关产品推荐

