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.
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.
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.
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.