MageSentinel

Payment notifications on Magento: orders stuck in “pending payment”

One of the most confusing checkout failures looks like success. The customer pays, the provider takes the money, and the order in Magento stays in “pending payment” — or gets cancelled automatically hours later.

All posts2 min read

Tapping a card on a payment terminal

How payment confirmation works

Most modern payment modules do not rely only on the customer’s browser returning to the store. The provider sends a server-to-server notification (a webhook) to an endpoint in your store, and the module updates the order — sometimes immediately, sometimes through a queue processed by cron.

That means three things must work: the provider can reach your endpoint, your store accepts the request, and cron and background jobs actually run.

Where it breaks

A firewall, WAF rule or basic auth on the store blocks the provider’s requests. The notification URL still points at an old domain after a migration. An expired certificate makes the provider refuse to deliver. Or cron has stopped, so notifications are received but never processed.

Pending orders that are cancelled automatically make it worse: the customer was charged, then gets a cancellation email.

Finding and preventing it

In the provider’s dashboard, look at recent notification deliveries: failures usually show the HTTP status your store returned. In Magento, check the module’s log and whether its cron jobs ran.

Watch the ratio of pending to completed orders, and keep a checkout check running that reaches the payment step. When real order placement is enabled, it also confirms the order was created with the right total.

Check your own store now with the free Magento checkout test: it walks the checkout in a real browser, Luma or Hyvä, and shows the step where it stops.

Orders that stay in Pending Payment are covered in Magento orders stuck in pending payment.

For Greek banks and card redirects, read card redirect failures in Greek stores.

Common questions

What is a payment webhook in Magento?

A server-to-server message from the payment provider that tells Magento a payment succeeded, failed or was refunded, so the order status changes.

Why are webhooks not reaching Magento?

A firewall or bot rule blocks them, the URL in the provider settings is old, or the signing secret changed on one side.

How do I find failed payment notifications?

Compare paid transactions in the provider dashboard with orders still pending, and check the provider’s webhook delivery log and var/log/exception.log.