Stripe Connect Direct Charge出现Invalid token ID报错如何解决?
问题原因
核心原因是 Stripe 卡片令牌(token)存在账户归属限制,一个令牌仅能在生成它时对应的 Stripe 账户下使用,跨账户调用会直接返回 Invalid token Id 报错。你遇到的问题大概率属于以下几类情况:
- 生成令牌时传入的 Connect 账户 ID 和服务端创建
paymentIntent时传入的 Connect 账户 ID 不一致,存在拼写错误、多空格、参数传递格式错误的问题 - 你使用的 Connect 账户未完成激活流程,或未开通卡支付权限,导致平台侧生成的令牌无法被该 Connect 账户识别
- 你用的
stripe-expo版本对stripeAccount请求头的传递存在兼容性问题,导致实际生成令牌时没有带上该参数,最终生成的令牌归属你的平台主账户而非目标 Connect 账户
解决方案
你可以按照以下步骤逐一排查修复:
- 优先校验参数一致性
打印客户端生成令牌时传入的stripeAccount值,和服务端创建paymentIntent时传入的stripeAccount值,确保二者完全一致,没有多余的特殊字符或空格。 - 调整
paymentIntent创建参数的令牌传入方式
不推荐在payment_method_data.card.token字段传入令牌,你可以直接将令牌ID赋值给payment_method字段,同时移除内层的payment_method_data.card配置,修改后的代码示例如下:
stripe.paymentIntents .create({ amount: 1000, application_fee_amount: 100, confirm: true, currency: "gbp", description: "payment", payment_method_types: ["card"], payment_method: customerCard.id, // 直接传入生成的token ID即可 return_url: "你的支付完成回调地址" // confirm设为true时必须传入该参数 }, { stripeAccount: "实际的Connect账户ID"})
- 验证令牌实际归属
拿到生成的令牌ID后,可以先调用 Stripe 令牌查询接口,确认令牌的归属账户是否为目标 Connect 账户,排查客户端库是否正确传递了stripeAccount参数。 - 检查 Connect 账户状态
登录 Stripe 后台,确认目标 Connect 账户已经完成全部 KYC 验证,且卡支付功能处于启用状态。
内容的提问来源于stack exchange,提问作者Mark Reiner
相关产品推荐
相关产品推荐

