Expo集成Stripe调用confirmPayment时报需提供卡信息/令牌/paymentMethodId错误
报错原因
调用confirmPayment方法时缺少必填的卡片相关参数,Stripe无法获取支付所需的卡信息,因此触发You must provide card details, token or paymentMethodId报错。
修复方法
你已经提前完成了卡片信息完整性校验,只需要在confirmPayment的传参中增加cardDetails字段,将收集到的卡片信息传入即可,修改后的代码如下:
const handlePayPress = async () => { // 1. 收集客户账单信息(例如邮箱) if (!cardDetails?.complete || !email) { Alert.alert("请填写完整的卡片信息和邮箱"); return; } const billingDetails = { email: email, }; // 2. 从后端获取支付意图的客户端密钥 try { const { clientSecret, error } = await fetchPaymentIntentClientSecret(); // 3. 确认支付 if (error) { console.log("无法处理支付"); } else { const { paymentIntent, error } = await confirmPayment(clientSecret, { type: "Card", cardDetails: cardDetails, // 新增该行传入已校验的卡片信息 billingDetails: billingDetails, }); if (error) { alert(`支付确认错误:${error.message}`); } else if (paymentIntent) { alert("支付成功"); console.log("支付成功 ", paymentIntent); } } } catch (e) { console.log(e); } };
其他可选方案
如果你采用先创建支付方式再确认支付的逻辑,也可以不传cardDetails,改为传入提前生成的paymentMethodId参数,同样可以完成支付确认。
内容的提问来源于stack exchange,提问作者Muneeb Ahmad
相关产品推荐
相关产品推荐

