Php 条纹网钩。处理多个webhook事件

Php 条纹网钩。处理多个webhook事件,php,stripe-payments,Php,Stripe Payments,我对Stripe Webhook有问题,尤其是在payment_intent.processing事件方面。 在我必须维护的旧应用程序中,我们使用3种付款方式。其中一个是SOFORT payment。这种支付方式的主要区别在于,您应该等待几天银行的响应,然后从Stripe Webhook获得支付成功响应。但我们的应用程序要求我们在客户付款时立即填写客户余额。SOFORT是值得信赖的,我们从未遇到过交易在处理过程中被取消的情况 但两天前,我遇到了一个新问题,stripe创建了两个支付意图。以1秒的

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

但两天前,我遇到了一个新问题,stripe创建了两个支付意图。以1秒的间隔处理事件,客户在余额上获得了两次积分。 下面是一段代码来解释我的意思:

$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可能会重新发送事件。根据最佳实践,您可以考虑记录已收到的事件。

Webhook端点偶尔会多次接收同一事件。我们建议您通过使事件处理幂等来防止重复的事件接收。一种方法是记录已处理的事件,然后不处理已记录的事件


虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能无效。-接得好,尼科哈斯!更新了我的答案。谢谢。这正是我要找的。虽然条带支持证实了这一点,但接收到多个处理事件是非常奇怪的。没问题。值得查看仪表板中的Webhooks部分,查看事件发送的次数。虽然此链接可能会回答问题,但最好在此处包含答案的基本部分,并提供链接以供参考。如果链接页面发生更改,则仅链接的答案可能无效-