Stripe API变更后,如何通过CheckoutSession获取PaymentIntentID?
获取Stripe CheckoutSession中的PaymentIntent ID
有两种可靠的方式获取PaymentIntent ID,可根据业务场景选择:
1. 同步从创建后的CheckoutSession中获取
当你创建**一次性支付(payment模式)**的CheckoutSession后,若Session创建成功,可直接从返回的Session对象的PaymentIntentId属性取值:
var service = new SessionService(); Session session = service.Create(options); // 读取PaymentIntent ID if (!string.IsNullOrEmpty(session.PaymentIntentId)) { string paymentIntentId = session.PaymentIntentId; // 执行后续业务逻辑 }
注意:这种方式仅适用于payment模式的Session,且仅当Stripe已生成对应PaymentIntent时返回有效值,部分场景下可能为空,生产环境更推荐第二种方式。
2. 通过Webhook异步监听支付完成事件
当用户完成Checkout支付后,Stripe会发送checkout.session.completed事件到你配置的Webhook地址,在事件 payload 中可以获取到准确的PaymentIntent ID,这是生产环境的最优方案:
// 处理Webhook请求的核心逻辑 var stripeEvent = EventUtility.ConstructEvent( jsonPayload, // 从请求体读取的JSON字符串 request.Headers["Stripe-Signature"], // 请求头中的签名 webhookSecret // 你的Stripe Webhook密钥 ); if (stripeEvent.Type == Events.CheckoutSessionCompleted) { var completedSession = stripeEvent.Data.Object as Session; string paymentIntentId = completedSession.PaymentIntentId; // 这里可以处理支付完成后的业务,比如更新订单状态、发送通知等 }
额外说明
- 如果你的Checkout Session是订阅(
subscription模式),则不会直接返回PaymentIntentId,需要监听customer.subscription.created等订阅相关事件来获取后续生成的PaymentIntent。
内容的提问来源于stack exchange,提问作者Modestas Vacerskas
相关产品推荐
相关产品推荐

