You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 06:13:26