Stripe一次性支付场景下如何获取对应产品ID?
一次性支付获取产品ID的可行方案
方案一:checkout.session.completed+metadata 完全可靠
checkout.session.completed是Stripe官方认定的一次性支付成功核心事件,触发就代表用户完成支付、资金流程确认,完全可以作为支付成功的判断依据。把产品ID塞进Checkout Session的metadata是行业常规操作,Stripe会完整保留并返回这些数据,不会出现丢失情况。
创建Checkout Session时的示例代码(以Python为例):
stripe.checkout.Session.create( payment_method_types=['card'], line_items=[{ 'price': 'price_123', 'quantity': 1, }], mode='payment', success_url='https://example.com/success', cancel_url='https://example.com/cancel', metadata={ 'product_id': 'prod_456' # 这里绑定你的产品ID } )
监听该事件时,从返回的session对象里就能直接拿到metadata.product_id,同时可以结合payment_status字段(值为paid)做双重验证,确保万无一失。
方案二:直接从line_items解析产品ID(更原生)
其实不用额外设置metadata,checkout.session.completed返回的session数据里,line_items.data数组的每个条目都包含price.product字段,这就是对应的产品ID。示例返回结构:
{ "line_items": { "data": [ { "price": { "product": "prod_456" // 直接提取这个值就是产品ID }, "quantity": 1 } ] } }
这种方式无需自定义元数据,直接用Stripe原生返回的字段,更简洁。
关键提醒
- 务必配置正确的webhook端点,订阅
checkout.session.completed事件,并且一定要验证webhook签名,避免收到伪造请求。 - 一次性支付确实不会生成发票,所以没有
invoice.paid事件,checkout.session.completed就是你要找的核心支付确认事件。
内容的提问来源于stack exchange,提问作者Ahmet Yazıcı
相关产品推荐
相关产品推荐

