Plugin Directory


Ignore:
Timestamp:
10/21/2026 07:26:01 AM (3 weeks ago)
Author:
walletup
Message:

6.3.6: correct edition labels and licence reminder; safer Stripe payment updates

File:
1 edited

Legend:

Unmodified
Added
Removed
  • wallet-up/trunk/src/API/WebhookHandler.php

    r3757748 r3757857  
    481481            }
    482482
     483            if (!$isTestMode && empty($event->livemode)) {
     484                $this->errorHandler->log('Stripe webhook ignored: a test-mode event (' . $event->type . ') reached a store that takes live payments');
     485                $this->updateWebhookStatus($webhookId, 'completed', 200, microtime(true) - $startTime, 'Test-mode event ignored on a live store');
     486                return new WP_REST_Response(['success' => true, 'ignored' => 'test_mode_event'], 200);
     487            }
     488
    483489            $eventType = $event->type;
    484490            $object = $event->data->object;
    … …  
    606612        if ($orderKey && $order->get_order_key() !== $orderKey) {
    607613            $this->errorHandler->log("Stripe webhook: order key mismatch for order {$orderId}");
     614            return;
     615        }
     616
     617        $paidMinor = (int) ($paymentIntent->amount_received ?? $paymentIntent->amount ?? 0);
     618        $dueMinor = \WalletUpPro\Core\Payments\PaymentGatewayHandler::toMinorUnits((float) $order->get_total(), (string) $order->get_currency());
     619        $sameCurrency = strtolower((string) ($paymentIntent->currency ?? '')) === strtolower((string) $order->get_currency());
     620        if (!$order->is_paid() && (!$sameCurrency || $paidMinor < $dueMinor)) {
     621            $this->errorHandler->log("Stripe webhook: PaymentIntent {$paymentIntent->id} does not cover order {$orderId}; order left unpaid");
     622            /* translators: %s: Stripe PaymentIntent ID */
     623            $order->add_order_note(sprintf(esc_html__('Stripe reported a payment (PaymentIntent: %s) that does not match this order total, so the order was not marked as paid.', 'walletup'), $paymentIntent->id));
     624            $order->save();
    608625            return;
    609626        }
Note: See TracChangeset for help on using the changeset viewer.