Managing B2B Purchase Orders & Payments-on-Account in WooCommerce

WooCommerce Payment-on-Account Limitations

WooCommerce is great for creating and taking orders but has no built-in accounting features or ability to handle B2B orders that are usually made with a purchase order and not paid until the end of the following month.  Xero is great for invoicing, applying payments and managing accounts and credit control for B2B customers.  There are a number of plugins that create PDF Invoices in WooCommerce but these still do not enable the full Payment on Account process to be used. Whilst useful as a next step they are really going down the wrong road as WooCommerce is not, and never will be, an accounting system anything like Xero and so are not the solution for proper businesses.

Benefits of Integration

Xeroom enables these two halves to be put together in a seamless manner to create an integrated and powerful whole ecommerce system. This provides some really useful benefits for managing both B2C and B2B customers.

  1. Enable Payments on Account Process – This important process can now be handled with your existing systems and with no new investment or risks in a bespoke development or different platform.
  2. Avoid Costly Errors – Accurate invoices are issued without costly and time-consuming errors that need human intervention to resolve.
  3. Time-saving – The invoices are automatically generated and sent to customers saving hours.
  4. Professional Looking – Impress your customers with your professional appearance.
  5. Avoid Delayed Payments – Invoices from Xero are sent immediately after checkout so no delays are created to you getting paid on-time.
  6. Management of Process – Easy to set up and you have full control of how the process is running.
  7. Visibility of Order Status – You can easily see with colour-coded dashboard.

Furthermore, if you are already using a PDF Invoice plugin then Xeroom will work with it to harmonise the invoice number in Xero thus avoiding confusing your customers.

The Order-to-Payment Process

If you have business customers who place orders with payment on account “POA” then the overall process is as follows:

  1. Customer places an order and uses the Purchase Order gateway to checkout. This captures the PO number and any other relevant details. The order status is set to hold, pending or processing (ie paid) depending on the setting.
  2. The order is posted to Xero by Xeroom – again triggered by the setting ie status change or manually.
  3. The Xero invoice is sent to the customer either automatically by Xeroom or manually. The invoice due date can be set in Xeroom to 30 days.
  4. The order is processed and goods despatched.
  5. The Xero statement sent to the customer at the end of the month with all invoices due for payment.
  6. The customer makes payment and Xero is automatically updated by the live feed.
  7. The bookkeeper reconciles the bulk payment to the relevant invoices and marks them as paid.
  8. Xeroom updates the status in WooCommerce to “Paid in Xero” and completes the order.


Processing Steps – Instant Payment Gateways for B2C

If you have instant payments typically used for B2C websites with gateways such as Stripe, Paypal or Credit Card then the following steps take place depending on your settings. The table shows how Xeroom ties both WooCommerce and Xero together to work seamlessly and automatically in a way that is fully under your control. Green is the desired status, orange is intermediate.


Processing Steps – Delayed Payment Gateways for B2B

If you are using a delayed payment for a B2B website with gateways such as payment-on-account, bank transfer, COO the following table details the processing steps that take place. As you can see the key difference is that the order process can move forward without receiving the actual payment but instead a request or intent to pay is created often using a purchase order number.

Occasionally it may be paid soon after by bank transfer (the second row) but normally is paid at the end of the current or next month following receipt of the invoice. So the crucial thing is that the invoice is created in Xero and sent to the customer immediately following order and so becomes a debtor (yellow box action). Statements are then sent to the customers at the end of the month and a consolidated payment made. Once received and applied to the invoices in Xero by reconciliation Xeroom then posts the payment and status back to WooCommerce to complete the order status there (the blue boxes).


Can Both Types of Business be Handled by Xeroom?

Absolutely! Many companies have a mix of B2C and B2B customers. WooCommerce enables the multiple payment gateways and Xeroom gives a detailed control of how each gateway can send the payment automatically or not eg Stripe and Paypal yes but PO and bank transfer no. For different wholesale and retail prices the WooCommerce Wholesale Ordering plugin by Stephen Sherard will enable this to be setup and Xeroom works with this plugin.

Payment Synch Xero-to-WooCommerce

Once payment is made by the customer then it will show in Xero’s automatic bank feeds either as an individual payment which can be matched with payments sent by Xeroom or as an aggregate consolidated payment that covers multiple invoices. Your bookkeeper will reconcile these actual payments into the bank with the invoices and automatic matching rules can be utilised. When an invoice is paid off in Xero this will trigger Xeroom to update the order status back in WooCommerce. It will show the order Xero status as “Paid in Xero” in blue and also change the order status to “Completed”. It takes around 2 mins for the update to show in WC.

The light blue outline to the box indicates that the invoice has been sent automatically by Xeroom earlier in the process.

Payment Synch Setup in Xeroom

Xeroom uses a webhook that gets triggered by Xero on certain events such as payment. To obtain your webhook go to your Xero app in and under webhooks.

Tick the invoices box and add the delivery URL which is:


where websitename is your own website name with correct ending ie .com etc.

When you hit save it will generate a webhook and status box.Copy this webhook into the box in Xeroom and save it.  Then go back and hit the “Send intent to receive” button. If everything is good then you will get an “ok” message. If it fails the status will be red. Check your settings are correct.


Errors and Troubleshooting

If the webhook has failed you will get the following message.

  1. Check if your server firewall or any security plugs are blocking the request.
  2. Check for Cloudflare or other caching or anti-botapps that you are using to see if they are blocking it.
  3. Check that your server has Ngnix enabled and set the default application to Xeroom.
  4. Install the Rest API Log plugin which is under tools and that gives a lot more info on the request https://www.websitename/wp-admin/tools.php?page=wp-rest-api-log-view-entry&id=1087


How to Use Purchase Order Numbers for Orders

The first step is to install the Purchase Orders for WooCommerce plugin.  This enables the PO number and any other details such as name and address to be captured at checkout – The settings for this are found under WooCommerce/Settings/Payments.

The PO number will then appear in the order and also in the invoice.  At present Xero doesn’t permit custom fields so the information is presented as a line item on the invoice.  The PO number can also be used as the invoice reference from version 2.3.3.