Android集成Stripe PaymentSheet报Checkout创建的PaymentIntents不可操作错误
错误触发场景说明
该报错与Android端PaymentSheet配置、测试卡号填写逻辑无关,核心触发原因是后端返回的PaymentIntent资源创建来源与前端调用的支付能力不匹配,具体触发条件如下:
- 后端生成PaymentIntent时,是通过创建Stripe Checkout Session(Stripe托管结账页资源)的方式连带生成的关联PaymentIntent,而非独立调用PaymentIntent创建接口生成的普通PaymentIntent。
- Stripe对不同来源的PaymentIntent做了强权限隔离:绑定Checkout Session的PaymentIntent仅允许通过Stripe官方托管的Checkout页面完成支付流程,禁止传入移动端/网页端SDK的PaymentSheet、自定义卡片收集组件等客户端支付模块做后续操作,一旦客户端尝试操作这类PaymentIntent就会抛出该错误。
排查修复方案
- 排查后端创建支付参数的逻辑:禁止将Checkout Session返回结果中关联的PaymentIntent对应的
clientSecret传给前端,这类参数仅适配Stripe托管结账页跳转场景,无法用于原生PaymentSheet唤起。 - 调整后端创建逻辑:如果业务场景需要使用Android端原生PaymentSheet完成支付,后端需直接独立调用Stripe的PaymentIntent创建接口(服务端SDK对应方法为
PaymentIntent.create()),将接口直接返回的clientSecret下发给前端即可,无需提前创建Checkout Session资源。 - 校验方式:拿到后端返回的
paymentIntentID后,可在Stripe后台开发者日志中查询该资源详情,若详情中存在checkout_session关联字段,即可确认PaymentIntent创建来源错误。
你贴出的Android端presentPaymentSheet实现代码本身无语法或配置错误,替换为正确来源的clientSecret后,使用4242 4242 4242 4242测试卡即可正常走通支付流程。
内容的提问来源于stack exchange,提问作者ndriqa
相关产品推荐
相关产品推荐

