支付被拒时如何关联Stripe会话与支付意向事件
解决Stripe支付失败事件关联Checkout Session的问题
核心方案:通过Payment Intent的metadata字段实现正向关联
在创建Checkout Session时,将生成的Session ID(如cs_test_12345...)写入对应Payment Intent的metadata中。后续无论支付成功或失败,都能直接从事件的payment_intent对象里读取到关联的Session ID,无需额外调用接口。
具体操作步骤
创建Session时注入关联标识
调用checkout/sessions接口创建会话时,通过payment_intent_data[metadata]参数,把当前Session ID(或你系统内的订单唯一标识)存入Payment Intent的元数据:# Python SDK示例 stripe.checkout.Session.create( payment_method_types=['card'], line_items=[{'price': 'price_xxx', 'quantity': 1}], mode='payment', success_url='https://your-domain.com/success', cancel_url='https://your-domain.com/cancel', payment_intent_data={ 'metadata': { 'checkout_session_id': 'cs_test_xxxxxx' # 填入当前生成的Session ID } } )其他语言SDK写法逻辑一致,核心是在
payment_intent_data中配置metadata字段。在失败事件中读取关联信息
收到payment_intent.payment_failed或charge.failed事件时,直接从事件对象中提取关联标识:- 对于
payment_intent.payment_failed:event.data.object.metadata.checkout_session_id - 对于
charge.failed:event.data.object.payment_intent.metadata.checkout_session_id(Charge对象关联了Payment Intent,可嵌套读取)
- 对于
补充说明
Stripe默认不会在Payment Intent或Charge的事件中直接返回Checkout Session ID,通过自定义metadata是官方推荐的正向关联方案,完全不需要依赖反向查询Session接口。
如果想精简监听事件,只需保留以下几个核心事件即可覆盖支付全流程:
checkout.session.completed:支付成功payment_intent.payment_failed:支付失败- 可选
charge.failed:作为失败事件的补充
内容的提问来源于stack exchange,提问作者kristakis
相关产品推荐
相关产品推荐

