我创建付款链接如下
//Create payment link
var quantity int64 = 1
linkParams := &stripe.PaymentLinkParams{
LineItems: []*stripe.PaymentLinkLineItemParams{
{
Price: &priceObj.ID,
Quantity: &quantity,
},
},
Params: stripe.Params{
Metadata: map[string]string{
"id": 'some id',
"value": 'some value',
},
},
}
result, linkError := paymentlink.New(linkParams)
然后,当用户单击此付款链接时,付款表单将打开,并且一旦处理付款,我的 webhook 就会被触发。
我监听事件“charge.succeeded”和“checkout.session.completed” 所以这就是问题,我需要卡的最后 4 位数字(我通过“charge.succeeded”获得,但不是通过“checkout.session.completed”获得)以及我在创建付款链接时设置的元数据(通过“checkout”获得) .session.completed' 但不带有 'charge.succeeded')
那么有没有办法在任何“checkout.session.completed”中同时获取最后 4 位数字和元数据? 我尝试了很多方法,例如使用 id 访问 PaymentIntent 但没有获取值。
捕获
last4
和 metadata
的最佳方法是仅侦听这两个事件并缓存其内容以便于查找。
如果您绝对必须为每个属性都有一个序列化工作流程,那么从单个 Webhook 获取它们的最佳方法将取决于您正在侦听的事件。
例如: 要从
last4
事件获取 checkout.session.completed
,您需要获取与结帐会话的付款意图关联的费用对象。这看起来像这样:
checkout.session.completed
webhook 事件payment_intent
属性上的 ID(请参阅此处)expand
latest_charge
对象(请参阅此处了解属性,请参阅此处了解扩展)latest_charge.payment_method_details.card.last4
类似的方法可以用于从
metadata
获取 charge.succeeded
,只不过您可以使用费用的 payment_intent
ID 来进行列出所有结帐会话 API 调用,以筛选特定的付款意图。