Let WooCommerce Customers Checkout and Pay By Credit Card Later

Sometimes we get requests for this scenario. A store owner wants to allow customers to add items to their cart and submit the order for review. The store owner checks the order, makes any adjustments and then sends an invoice to the customer. At that point the customer can pay via credit card.

The tricky part of this is if you allow credit card payments to be made for the invoice, they’ll also be available when the order is placed initially.

You could authorize the credit card transaction and capture the funds later, but that won’t allow you to modify the order. You can only capture the funds that have been authorized.

Today we’re going to look at a way to let your customer select products, submit the order for review and ultimately pay via credit card.

First, we need to enable the credit card payment method and the check method. For our demo, I’ll be using Stripe for the credit card. I’m using the check gateway because it allows the customer to place an order without actually transferring any money.

But we need to change the text so it fits our situation a bit more. To do that go to WooCommerce > Settings > Payments and click on the Check gateway in the list. You can change the title and description here so they make more sense to your customers at checkout.

Check payment hacking

Next, we need to keep our Stripe gateway from showing in the normal checkout flow. To do this, we’ll need to add this snippet to our theme’s functions.php file or with the Code Snippets plugin.

What this snippet does is remove the Stripe gateway everywhere except for the “order pay” page (endpoint). This is where our customer will end up paying for the order. It also removes the Check gateway only on the “order pay” page since it doesn’t make sense there.

So now when our customer adds items to their cart and goes to checkout, this is what they’ll see.

Once they submit the order, we’ll receive a notification that an order has been created. It will be “on hold” and ready for us to review.

Now we’ll want to edit the order and make any changes to the products and prices that we need to. Once that’s finished we’ll change the order status to “Pending payment” and update the order. To send an invoice to the customer, click on the “Actions” drop-down in the top right of the order and select the option to “Email invoice/order details to customer” and then click the arrow button next to it.

Send Invoice
Your customer will receive an email with a pay link

The customer can click on the pay link in the invoice or they can view their order from inside the account page on your site. When they go to pay, the “Check” option won’t be available, but now our Stripe credit card form will be.

Pay with Stripe

So that’s a way we can allow customers to create an order with the items they want, submit it for review and then ultimately pay via credit card. If you have any questions, let me know in the comments below.

2 responses to “Let WooCommerce Customers Checkout and Pay By Credit Card Later”

  1. Erin Avatar

    This is what I need to do for a registration. We are not accepting payment in case it will not happen due to COVID. We will want to send an invoice closer to time when we know the event will happen. How did you add the payment link in the email?

    1. Bill Robbins Avatar
      Bill Robbins

      Great question. When you edit an order, in the top-right corner there is a drop-down for “order actions.” You can send a customer invoice there that will include a link they can use to pay. The link is included in the WooCommerce core so you don’t have to do anything to add it. It’ll be there on any unpaid order.

Leave a Reply

%d bloggers like this: