gpt4 book ai didi

php - Stripe Webhooks。处理多个 webhook 事件

转载 作者:行者123 更新时间:2023-12-04 01:05:50 25 4
gpt4 key购买 nike

我对 Stripe Webhooks 有疑问,尤其是 payment_intent.processing 事件。在我必须维护的旧应用程序中,我们使用 3 种付款方式。其中之一是 SOFORT 支付。这种付款方式的主要区别在于您应该等待银行响应几天,然后从 Stripe Webhook 获得付款成功响应。但是我们的应用程序要求我们在客户付款时立即填写客户余额。 SOFORT值得信赖,我们从未遇到过交易在处理过程中被取消的情况。

但 2 天前我遇到了一个新问题,当时 stripe 创建了两个 payment_intent.processing 事件,间隔为 1 秒,并且客户在他的余额中获得了 2 次信用。这是一段代码来解释我的意思:

$paymentIntent = $event->data->object;
$order = Db_Orders::getOrderPaymentIntentId($paymentIntent->id);
switch ($event->type) {
case 'payment_intent.processing':
if ($order['wlo_payment_type'] == PAYMENT_METHOD_SOFORT && $order['wlo_status'] == W_LEADS_ORDER_STATUS_STARTED) Utils::activateOrderOffers($order['id']);
$orderObj = new Db_LeadOrder();
$orderObj->id = $order['id'];
$orderObj->wlo_status = W_LEADS_ORDER_STATUS_PENDING;
$orderObj->save();
break;
case 'payment_intent.succeeded':
if ($order['wlo_payment_type'] != PAYMENT_METHOD_SOFORT && $order['wlo_status'] != W_LEADS_ORDER_STATUS_SUCCESS) Utils::activateOrderOffers($order['id']);
$orderObj = new Db_LeadOrder();
$orderObj->id = $order['id'];
$orderObj->wlo_response_date = Utils::formatDateDb(time());
$orderObj->wlo_status = W_LEADS_ORDER_STATUS_SUCCESS;
$orderObj->save();
break;
default:
echo 'Received unknown event type ' . $event->type;

activateOrderOffers 函数中,我对客户余额进行了所有操作。正如您在 payment_intent.processing 事件中看到的那样,我仅针对具有 STARTED(所有订单的初始值)状态的 SOFORT 付款方式执行它。

据我了解,在我的例子中,我正在监听两个并行处理事件。我是对的吗,有什么解决办法吗?我知道,在付款尚未成功时使用余额进行操作可能是一种不好的做法,但这是客户的主要要求。向大家致以最诚挚的问候。

最佳答案

Stripe webhook 可能会重新发送事件。根据最佳实践,您可以考虑记录您已经收到的事件。

https://stripe.com/docs/webhooks/best-practices#duplicate-events

Webhook endpoints might occasionally receive the same event more than once. We advise you to guard against duplicated event receipts by making your event processing idempotent. One way of doing this is logging the events you’ve processed, and then not processing already-logged events.

关于php - Stripe Webhooks。处理多个 webhook 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66508287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com