我有一个付费会员站点,该站点通过Stripe Checkout(server integration)进行付款。用户注册后,他们将被重定向到Stripe结帐(其ID作为“ client_reference_id”传递),在此他们输入卡的详细信息。对于checkout fulfillment,我有一个webhook设置,它链接到事件'checkout.session.complete'。
一切正常,webhook触发,端点处理数据并将相应帐户标记为已激活,向帐户持有人和网站管理员发送电子邮件,让他们双方都知道该帐户已创建,并且付款成功。
但是,如果付款失败,我不知道将什么事件附加到Webhook上以通过Stripe Checkout检测失败的付款。记录的唯一结帐事件是“ checkout.session.complete”,没有类似“ checkout.session.failed”的事件。有“ invoice.payment_failed”,但用于订阅而不是一次性结帐。
我们希望在付款失败时基本通知站点管理员,以便他们知道已经创建了一个帐户,但仍在等待付款。
是否存在我遗失的结帐事件,或者寻找失败的结帐交易的另一种方法?
答案 0 :(得分:3)
要收取信用卡或借记卡的费用,请创建一个
Charge
对象。您可以检索并退还单个费用以及列出所有费用。费用由唯一的随机ID标识。
-来自条纹API Documentation。
然后您可以检测到charge.failed
中的webhook
response,以表明尝试使用charge
对象has failed。
条纹非常清晰地记录在案,但是最近他们迷路了。
条纹卡付款始终使用Charge
对象,有时这些对象是您自己设置的(invoices
,subscriptions
等),有时是后面设置的通过Stripe来显示场景(例如“结帐流程”等),但始终已设置好场景,因此您的webhook始终可以检测到charge.failed
事件。
这确实起作用,但是,由于client_reference_id不在charge.failed数据中,因此无论如何我都无法将失败的付款链接到特定帐户。但是就我的实际问题而言,此事件确实有效并且是正确的答案,只是不幸的是,它不能解决我的具体情况。
要解决这个问题;使用Stipe界面或通过编码:
1)创建一个Customer
对象,并保留此客户ID的某种记录。
2)运行条纹Charge
时,将设置关联的$ charge-> customer。这对您的webhook可用。
3)出现Webhook结果时,使用此{典型值)$event->data->object->customer
与服务器上的正确客户交叉引用费用。
4)如评论中所述,Stripe Webhook Testing不会不用示例数据(例如->customer
... :-(
答案 1 :(得分:2)
我知道回复有点晚了 - 但我有一个可行的解决方案!!
当我在 Stripe 中创建“会话”时,我确保填写 SessionCreateOptions,以便将 PaymentIntentData.Metadata 字段设置为包含我客户的 ID 和内容。当我这样做时,元数据不仅会出现在 payment_intent.created 和 payment_intent.succeeded webhooks 中,还会出现在 charge.succeeded/failed 中!
这意味着,当付款失败时,我可以查找我跟踪的尝试付款,并通过电子邮件向他们发送回邮件,让他们知道失败以及原因,而且我也可以将其记录下来以供我查找时参考我的客户服务工具中的那个客户。