Stripe-Webhooks. Umgang mit mehreren Webhook-EreignissenPhp

PHP-Programmierer chatten hier
Guest
 Stripe-Webhooks. Umgang mit mehreren Webhook-Ereignissen

Post by Guest »

Ich habe ein Problem mit Stripe Webhooks, insbesondere mit dem Ereignis payment_intent.processing.
In unserer alten App, die ich pflegen muss, verwenden wir drei Zahlungsmethoden. Eine davon ist die SOFORT-Zahlung. Der Hauptunterschied dieser Zahlungsmethode besteht darin, dass Sie einige Tage auf die Antwort der Bank warten und dann vom Stripe-Webhook die Antwort „Zahlung erfolgreich“ erhalten sollten. Unsere Anwendung erfordert jedoch, dass wir das Kundenguthaben genau dann auffüllen, wenn der Kunde zahlt. SOFORT ist vertrauenswürdig und wir hatten noch nie Fälle, in denen Transaktionen während der Verarbeitung abgebrochen wurden.
Aber vor zwei Tagen stand ich vor einem neuen Problem, als Stripe zwei zahlungsabsicht.verarbeitung< erstellte /em> Ereignisse mit 1-Sekunden-Intervall und der Kunde hat 2 Mal Guthaben auf seinem Guthaben erhalten.
Hier ist ein Code, um zu erklären, was ich meine:
$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;

In der Funktion activateOrderOffers führe ich alle Manipulationen am Kundenguthaben durch. Und wie Sie im Ereignis payment_intent.processing sehen können, führe ich es nur für die SOFORT-Zahlungsmethode mit dem Status STARTED (anfänglich für alle Bestellungen) aus.
Soweit ich weiß, In meinem Fall warte ich auf zwei parallele Verarbeitungsereignisse. Habe ich recht und gibt es irgendwelche Ideen, wie man das lösen kann? Ich weiß, dass es eine schlechte Praxis sein könnte, den Kontostand zu manipulieren, während die Zahlung noch nicht erfolgt ist, aber das war die Hauptforderung des Kunden.
Mit freundlichen Grüßen an Sie alle.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post