WooCommerce crypto payments can fail to show up at checkout, or be picked up late, for two plain hosting reasons. The PHP extension bcmath is missing, or the background job that re-checks orders, WP-Cron, is not running on time. Neither is a bug in your store. Both take a few minutes to fix, and StayCrypto tells you in the admin when it spots either one. Here is how to check them and what to set.

Two hosting settings for a WooCommerce crypto plugin: the bcmath PHP extension and a working cron, each with what you see, the cause and the fix

Why a crypto plugin cares about your hosting

StayCrypto runs inside your own store, not on a server of ours. It reads the blockchain from your site, matches each incoming transfer to an order by its exact amount, and closes the order. That design has two consequences. The matching needs exact decimal math, which is where bcmath comes in. And the reading has to keep happening even when nobody is looking at the payment page, which is where cron comes in.

For the full list of requirements (PHP 8.0, WordPress 6.0, WooCommerce 7.0), see the documentation. The two below are the ones that cause most of the confusion.

bcmath: the math extension

An invoice for 40.27 USDT has to be compared to the incoming transfer exactly, to the last digit. Ordinary decimal numbers in PHP are stored as floating point, and floating point cannot always represent a value like 0.1 exactly. A payment that differs from its invoice by a rounding crumb would never match its order. The bcmath extension does decimal math with arbitrary precision, so the plugin uses it for every amount.

If bcmath is missing, StayCrypto does not guess. It does not offer crypto at checkout, and it shows an admin notice saying bcmath is missing. Your customers simply see no crypto option, which is easy to mistake for a settings problem.

StayCrypto admin notice when the PHP extension bcmath is missing: the payment method has not been registered
The admin notice you see when bcmath is missing. The payment method is not registered until it is enabled.

How to check and fix it

  • Activate the plugin. If bcmath is missing, the WordPress admin shows the notice right away.
  • Or open your hosting panel and look for bcmath in the list of PHP extensions. Panels often call that page PHP Selector, Select PHP Version or PHP settings.
  • Or ask your host: “Please enable the PHP bcmath extension for my domain.” Your host can switch it on.

After it is enabled, reload the admin. The notice should be gone and StayCrypto should appear in the payment methods at checkout.

Cron: the background check

Two checks, not one

While a buyer keeps the payment page open, that page asks for the payment about every seven seconds. That is why a confirmed payment feels instant to the buyer. But buyers close tabs. Then a second check takes over: a background job that runs every 2 minutes and re-reads every order still waiting for payment. It is the safety net for everyone who paid and left the page.

How StayCrypto notices a payment: the payment page asks every 7 seconds, and a background check on WP-Cron runs every 2 minutes after the buyer leaves

Why WP-Cron can run late

WordPress has no real background process. Its scheduler, WP-Cron, only wakes up when someone loads a page on your site. On a busy store that means it runs close to on time. On a quiet store nobody may visit for an hour, and the 2 minute check waits. In that time the money is already in your wallet; only the order is not marked paid yet.

Some hosts and speed plugins also switch the built-in trigger off with DISABLE_WP_CRON in wp-config.php. If nothing replaces it, the background check stops completely.

StayCrypto Status page: blockchain scanning has not run in a while, and WP-Cron autorun is disabled on this hosting
The StayCrypto Status page when the built-in WordPress trigger is switched off.

What it looks like

What you seeLikely causeWhat to do
The crypto option is missing at checkoutbcmath is not enabledEnable the bcmath extension (see above)
The transfer is on the block explorer with enough confirmations, but the order stays pending for many minutesThe background check is lateOpen StayCrypto → Status, then set up a real cron job
An admin warning says the background check is behindThe schedule is not runningSet up a real cron job

StayCrypto watches for this itself. If the background check is overdue by about 15 minutes or more (30 minutes until the plugin has learned your normal rhythm) and an order is waiting, it shows a warning in the admin and sends a Telegram message if you have set that up. If the 2 minute schedule disappears completely, for example after a cleanup plugin runs, the plugin puts it back on the next request and tells you it did. For the longer list of causes, see why a USDT payment does not show up in WooCommerce.

StayCrypto warning in the WordPress admin: blockchain scanning has not run in a while
The warning StayCrypto shows when the background check is overdue.

Set up a real cron job

  1. Open Cron Jobs in your hosting panel. DirectAdmin, cPanel and most other panels have a page with that name.
  2. Add a job that runs every 2 minutes. In the schedule fields use */2 for the minute and * for the rest, with this command:
curl -s "https://your-site.com/wp-cron.php?doing_wp_cron" > /dev/null 2>&1
  1. Replace your-site.com with your own domain. If curl is not available on your host, use wget -q -O - "https://your-site.com/wp-cron.php?doing_wp_cron" instead.
  2. No access to cron on your plan? A free external service that opens the same address on a timer does the same job. cron-job.org is one example.
  3. Open StayCrypto → Status in your WordPress admin. It shows whether the background check is running on time.

You do not need to edit wp-config.php for this. If you want the built-in trigger off once the real cron job is confirmed to be working, you can add define( 'DISABLE_WP_CRON', true ); there. Do that only after the real job runs, because with the trigger off and no real job, nothing runs the background check.

A short checklist

  • bcmath is enabled, and the crypto option shows at checkout.
  • A real cron job opens wp-cron.php every 2 minutes.
  • StayCrypto → Status shows the background check running on time.
  • Telegram notifications are set up, so a late check reaches you without opening the admin.

FAQ

Does StayCrypto work without a real cron job?

Payments are still detected: the payment page checks while a buyer is watching, and WP-Cron runs the background check when visitors arrive. The real cron job matters for buyers who close the page and for quiet stores, where the background check can be late. Nothing is lost during the delay. The money is in your wallet, and the order waits to be marked paid.

What is bcmath?

A PHP extension for exact decimal math. StayCrypto needs it to compare payment amounts to the last digit. Without it, the plugin does not offer crypto at checkout and shows an admin notice.

How often does the background check run?

Every 2 minutes, when WP-Cron fires on schedule. With a real cron job it fires on schedule regardless of site traffic.

How do I know the background check is running?

Open StayCrypto → Status in your WordPress admin. If the check falls behind while an order is waiting, the plugin also shows a warning in the admin, and sends a Telegram message if notifications are set up.

Do I need a real cron job on a busy store?

A busy store triggers WP-Cron often, so it usually runs close to on time. A real cron job costs nothing and removes the guesswork, so it is still worth setting up.

See the plugin page Ask a question