diff --git a/api/webhook.php b/api/webhook.php index 15b02e5..8756b68 100644 --- a/api/webhook.php +++ b/api/webhook.php @@ -57,21 +57,25 @@ switch ($eventType) { break; case 'payment_intent.succeeded': - // Payment Intent flow (embedded checkout) — metadata.order_id set directly on PI + // Payment Intent flow (embedded/direct) - skip if already confirmed by checkout.session.completed $paymentIntentId = $data['id'] ?? ''; $orderId = $data['metadata']['order_id'] ?? ''; if ($orderId) { - db()->update('orders', - [ - 'payment_status' => 'paid', - 'order_status' => 'confirmed', - ], - 'order_id = :id', - ['id' => $orderId] - ); $order = db()->fetch("SELECT * FROM orders WHERE order_id = :id", ['id' => $orderId]); - if ($order) { - sendOrderConfirmationEmail($order); + if ($order && $order['order_status'] !== 'confirmed') { + db()->update('orders', + [ + 'payment_status' => 'paid', + 'order_status' => 'confirmed', + 'stripe_payment_intent' => $paymentIntentId, + ], + 'order_id = :id', + ['id' => $orderId] + ); + $order = db()->fetch("SELECT * FROM orders WHERE order_id = :id", ['id' => $orderId]); + if ($order) { + sendOrderConfirmationEmail($order); + } } } break;