如何在Stripe的checkout.session.completed中获取银行卡后4位及元数据?
解决方案:在
checkout.session.completed事件中同时获取银行卡后4位与元数据 要实现这个需求,核心是正确获取并展开关联的PaymentIntent对象,同时Checkout Session本身已包含你设置的元数据,具体步骤如下:
1. 直接从Checkout Session提取元数据
你创建PaymentLink时设置的元数据会自动同步到Checkout Session中,在checkout.session.completed事件里直接读取session.Metadata即可:
// 解析checkout.session.completed事件到session对象 var session stripe.CheckoutSession err := event.Data.Object.UnmarshalInto(&session) if err != nil { // 处理解析错误 return } // 获取创建支付链接时设置的元数据 metadata := session.Metadata // 直接使用metadata["id"]和metadata["value"]访问对应值
2. 关联PaymentIntent获取银行卡后4位
Checkout Session对象包含关联的PaymentIntent.ID,你需要调用Stripe API获取完整的PaymentIntent对象,并展开payment_method字段才能拿到银行卡信息:
// 从Session中获取PaymentIntent ID paymentIntentID := session.PaymentIntent.ID if paymentIntentID == "" { // 无关联PaymentIntent,处理异常 return } // 构建参数,指定展开payment_method字段 piParams := &stripe.PaymentIntentParams{} piParams.AddExpand("payment_method") // 获取完整的PaymentIntent对象 paymentIntent, err := paymentintent.Get(paymentIntentID, piParams) if err != nil { // 处理API调用错误 return } // 提取银行卡后4位 if pm, ok := paymentIntent.PaymentMethod.(*stripe.PaymentMethod); ok { if cardDetails, ok := pm.Card.(*stripe.PaymentMethodCard); ok { last4 := cardDetails.Last4 // 此处拿到银行卡后4位 } }
关键注意点
- 必须展开
payment_method字段:默认情况下Stripe API返回的PaymentIntent不会嵌套完整支付方式信息,通过AddExpand("payment_method")才能获取到银行卡的last4属性。 - SDK版本兼容性:确保使用较新版本的Stripe Go SDK,避免因API结构差异导致字段无法读取。
- 错误处理:实际代码中需妥善处理解析、API调用等环节的错误,避免流程中断。
内容的提问来源于stack exchange,提问作者Praful Kadam
相关产品推荐
相关产品推荐

