Have you ever had any problems while you were just about to finish an online purchase? I mean all was going smoothly, you had already put in your cart all the items you wanted to buy so badly, but then on that last page (the checkout page), nothing happened. Maybe you got an error message, you were unable to complete the payment, or worse, you felt confused because of a redirect to the homepage with no warning.

I'm sorry I had to recall that painful trace in your memory (consumerism, what have you done to us!), but that's what your customers experience when your checkout page in your WooCommerce store isn't working as it's supposed to do.

Given how critical are checkout pages for all store owners and managers, we've talked with WordPress developer and Codeable expert Robin Scott to explore some of the probable causes of a failing checkout and collected insights on how to go about them.

So, what do you need to do when your WooCommerce checkout isn't working properly?

Let's see!

Think backward

The checkout page stopped working all of a sudden, or at least you've just been informed about that. Well, as with many other issues, the very first thing to do is to try to think or trace back what new actions, edits, and changes have been done recently. As Robin puts it:

The first thing to have a look at is how recently your checkout page stopped working and also what things you might have changed in between the time when it was working and when it stopped.

If you don't have records of past changes, or you actually didn't change anything, then the next thing to do is to start looking into your hosting setup.

Check your hosting configuration

Sometimes your checkout page could be misbehaving because your current hosting is somehow incompatible with WooCommerce. This could occur if you enabled a force https on your checkout where then the problem could be a result of a PHP setting gone wrong.

As Robin suggests:

If you haven't changed anything your side, the first place I would look at is your hosting configuration. One of the best way to check that is to look in the WooCommerce status and see if you've got all ticks in there. Check if there's anything like a template out of date, or if it says something about your server configuration which is out of date. That's definitely something that we want to investigate.

To confirm whether it's your hosting the one causing the problem, you should be able to put a copy of your website onto the same hosting and then disable all plugins but WooCommerce and your current theme. Leaving just WooCommerce and using the standard WordPress 2017 as your theme, you can now put through a transaction and see what happens:

With the standard WordPress theme and just WooCommerce active, if you'll find your checkout page still not working we know there's something wrong with the hosting setup.

Next thing to investigate is your payment gateway.

Check your payment gateway

Which payment gateway are you using? If the payment service you have installed is not working, chances are that your checkout will also not function. At times the payment gateway could just not be showing up on the checkout page, or an authentication error occurs every time you try to check out. In the first scenario, your payment option probably just requires an SSL certificate. In the second, there could be a problem with the connection between your store and your payment gateway service provider. Specifically, you (or your developer) might need to check whether your server uses an unsupported encryption type because - to put it simply - not all secure is equal.

Explains Robin:

You server might be secure, but using “weak” encryption. This is like comparing Fort Knox with razor wire to your own double lock and burglar alarm. Ecommerce transactions require higher standards. And, if your hosting provider doesn’t meet these criteria, you either need to move host or change your security setup.

Delve into Paypal Instant Payment Notifications

If you're one of the many using PayPal to collect money on your store, there's something that could negatively affect the completion of your checkout and that has to do with PayPal Instant Payment Notifications (IPN). It's a bit more technical than usual, I know, but I'll try to make it as easy as possible.

The are two main things important for you to understand here:

  1. If your server uses an unsupported encryption type (to PayPal), the Instant Payment Notifications might not work, hence your checkout won't complete.
  2. If your server configuration is missing a specific "thing", which should be there instead, your checkout won't complete.

In Robin's words:

PayPal has a thing called IPN, which is Instant Payment Notifications. If your server uses an unsupported encryption type, the Instant Payment Notifications might not work. Another thing that it could be the reason here is if either the SoapClient or CURL isn't installed on your server. You'll find that one in your WooCommerce status page: you'll see an X next to it saying that this is required for PayPal Instant Payment Notification.

Don't despair, though, if you've felt lost for a moment. Just be aware that there's this plugin to test whether your system is compatible with the current types of encryption accepted by PayPal.

Run a troubleshooting routine

If you haven't found anything yet that might be causing the issues with your checkout, then it's time to unroll the typical WordPress troubleshooting routine. As you did it to check whether it was your hosting causing the issues, you should do the same to see if it's something related to one of your plugins or your theme.

Highlights Robin:

Once you know your server is configured correctly because you've put in a successful test transaction, the next step is to try isolating the issue to something in your plugins or your theme that's preventing checkouts from completing. Firstly, try by disabling your theme. If the transaction doesn't complete, it sure has to do with your current theme. If it doesn't, then it might be a plugin. The quick way to find out which one is turning on each plugin and then test your checkout each time.

By disabling and then enabling back your theme and each of the plugin you're using, you'll have better chances to pinpoint the faulty "element" raising the problems.

Wrapping Up

A failing checkout can cause your customers to leave abruptly from your WooCommerce store, taking their wallet elsewhere. An incomplete checkout leads to a disappointed potential customer. And if your store is experiencing issues, there are several areas you - and your developers - should look into like the one outlined above. As always, hiring a WooCommerce specialist is always the best solution when you have none available in-house or just want things to be fixed as quickly as possible.

But there's a process could start doing right this second that will have a tremendous impact on how likely your store will have issues in the future. One action, which is more of an approach to better managing and running a website: test everything before making it go live.

This blog post features Robin Scott, an experienced WordPress developer who's also one of the founders of Silicon Dales, an agency focused on WordPress, WooCommerce, and a variety of other services. Robin has specialized in several areas such as Custom Plugins, Gravity Forms, Hosting Transfer, Maintenance, and WooCommerce Extensions, just to name a few.</em

New call-to-actionQuality: The Codeable Differene

  • Vika

    Hi all. Was wondering if anyone out there would be facing a payment issue such as mine. On my website http://www.novasupplies.online I have 3 payment methods. 1) Stripe (CC). 2) Part payment gateway (Laybuy.com) ) Part payment gateway (Genoapay.com). Now, laybuy and genoapay offer a 6-10 weekly payment option to customer and which these two companies pay the full amount to my store. Since I’ve integrated both these payment otpptions into my website it’s been miscalculating the sale price of the product, for example; Bike $120. Through the payment facilities I’d receive $100 (excluding the fee to the payment companies). I’m uncertain if these two payment plugins are the issues or it may be elsewhere. Be good to know if anyone else had been through the same issue I have gone through. Looking forward to all your responses. Cheers

  • Bidman1218

    Hello, I am new to woocommerce. I have set it up but when I try to go in a test it, it will not accept my password and when I click, “Lost your password?” I put in my email address but I never receive a link to reset the password. Please help.

  • D Bastian

    Thank you for the explanation, it really helps me who is still new to using woocommerce. jbonline.co.id

    Previously I was very confused, why suddenly checkout didn’t work, with this explanation I became very helpful

    thank you

  • I have to say, quite disappointing that you recommend the Stripe plugin from WooCommerce. It’s stock full of bugs, doesn’t support Stripe Checkout properly (you can enable it, but you really shouldn’t — it’s a gigantic mess!) and will cost many users a fortune in lost time and money (because of lost time, bugs and lowered conversion rate).

    WooCommerce’s own products are no longer a guarantee that you get a decent product. Far from it! We have had a ton of issues with Apple Pay and Google Pay plus heaps of other issues.

    I highly recommend everyone to skip the free and insanely badly made Stripe plugin from WooCommerce. If Stripe has sponsored this, then please, Stripe, save you money and create your own plugin. This one is horrendous and NOT a good brand association!

    Of course, don’t just take my word for it. Read the many one star reviews on wordpress.org!

    Another example of a horrible WooCommerce product by WooCommerce is the “WooCommerce PayPal Checkout” plugin. This is even worse! Way more 1 star reviews than 5 stars and trust me, they are legit.

    I get that your business is closely tied to WooCommerce’s business, but who feeds you? Businesses who hire you, not WooCommerce! If anything, you should slap them until they wake up, just like a good friend tells you if you have spinach between your teeth or a bad breath.

    WooCommerce, I am grateful for you, but when it comes to your payment plugins, your breath stinks really, really badly!

  • IF YOU ARE HAVING THE PROBLEM “Unable to create order” on checkout then here is the solution:

    The problem manifests when WooCommerce attempts to save the shop_order post type to wp_posts table.
    When someone hits checkout, the woo data store attempts to save the order as a post:

    at public function create( &$order ) { line 56

    This is the code that inserts the order:
    $id = wp_insert_post(
    ‘post_date’ => gmdate( ‘Y-m-d H:i:s’, $order->get_date_created( ‘edit’ )->getOffsetTimestamp() ),
    ‘post_date_gmt’ => gmdate( ‘Y-m-d H:i:s’, $order->get_date_created( ‘edit’ )->getTimestamp() ),
    ‘post_type’ => $order->get_type( ‘edit’ ),
    ‘post_status’ => ‘wc-‘ . ( $order->get_status( ‘edit’ ) ? $order->get_status( ‘edit’ ) : apply_filters( ‘woocommerce_default_order_status’, ‘pending’ ) ),
    ‘ping_status’ => ‘closed’,
    ‘post_author’ => 1,
    ‘post_title’ => $this->get_post_title(),
    ‘post_password’ => wc_generate_order_key(),
    ‘post_parent’ => $order->get_parent_id( ‘edit’ ),
    ‘post_excerpt’ => $this->get_post_excerpt( $order ),
    ), true

    Now you will notice that the insert creates a value in post_password field using wc_generate_order_key()
    If you look in your database you will notice that the post_password table is a varchar with max length of 20 chars. I found that wc_generate_order_key() was generating a password LONGER than 20 chars and therefore the insert was failing which manifests further up the chain as “Unable to create order”

    Internally wc_generate_order_key() does this:
    function wc_generate_order_key() {
    return ‘wc_’ . apply_filters( ‘woocommerce_generate_order_key’, ‘order_’ . wp_generate_password( 13, false ) );

    if you notice that wp_generate_password’s first parameter is the length of the password which in this case is 13
    the password is concatenated with “wc_” (length 3) and “order_” (length 6) so 13+3+6 = 22 chars of length

    So this got me thinking why would Woo write this code?
    Well it turns out that my wordpress version on the affected site was 4.7.12 ( we had ignored the updates to v5 as it as a heavy production site and we hadnt yet tested Gutenberg)
    I checked another site that was already at v5 of wordpress and sure enough the post_password field in wp_posts table is varchar(255) so later version of wordpress > 4.7.12 must have increased this field length:

    So the solution is:
    1. Update to latest WP version
    2. If you can update to latest WP Version because you havent tested it yet then go into PhpMyAdmin for your MySql database. You can find your Database name from wp-config.php
    Click on wp_posts or whatever prefix your posts table is using and click on “Structure” tab and modify the length of the post_password field to varchar(255)

    This drove me crazy and I see no solution anywhere on the internet for this.
    Hope this helps someone have a more productive day than I did lol
    🙂 🙂