WooCommerce bank transfer prepayment: automatic invoice after payment
With direct bank transfer, the customer pays into your bank account, without Stripe, Mollie or PayPal. WooCommerce therefore keeps the order in the status “On hold” at first. As soon as you have checked the incoming payment and set the status to “Processing”, Rechnungskit records the payment automatically. For physical goods, the already paid invoice is created when you set the order to “Completed” after shipping.
Two status changes, one clean flow. You keep working in WooCommerce, and Rechnungskit handles payment, invoice, archive and DATEV.
Writing invoices is easy. Writing compliant ones is not.
The difference between a PDF and a compliant e-invoice matters at the next tax audit. Rechnungskit closes exactly this gap.
Four steps to a compliant e-invoice.
- 01Map the payment methodUnder Connections, you assign the WooCommerce payment method seen in your orders to prepayment. For the WooCommerce core gateway for direct bank transfer, the technical ID is “bacs”. Each payment method sits on exactly one list: prepayment or pay by invoice.
- 02The order waitsWooCommerce first sets an order paid by direct bank transfer to “On hold”. As long as you do not confirm the payment, Rechnungskit creates neither a payment nor a premature invoice.
- 03Confirm the paymentYou check your bank statement and set the order to “Processing” in WooCommerce. Rechnungskit takes that status change as a prepayment receipt. You need neither a payment provider nor access to your bank account for this.
- 04Invoiced on shippingAfter shipping, you set physical goods to “Completed”. Rechnungskit creates the already paid ZUGFeRD invoice with the shipping date as the date of supply (Leistungsdatum), archives it to GoBD standards and includes it in the DATEV export.
Direct bank transfer gives you no automatic payment confirmation
WooCommerce ships with Direct Bank Transfer (BACS), an offline payment method for prepayment. The customer gets your bank details and pays you directly. Since no payment provider is involved, WooCommerce cannot confirm the payment itself and first sets the order to “On hold” (on-hold).
You check your bank statement and then change the order to “Processing”. According to WooCommerce, this status means the payment has been received and the order still has to be fulfilled. Rechnungskit uses exactly this status change as the payment signal. No banking connection or access to your bank account is required.
The WooCommerce statuses map the prepayment flow
| WooCommerce status | Meaning in the prepayment flow | Effect in Rechnungskit |
|---|---|---|
| On hold | transfer still to be checked | no payment, no invoice |
| Processing | payment confirmed | prepayment recorded once |
| Completed | goods shipped or service completed | invoice created with the fulfillment date |
| Cancelled | order will not be fulfilled | no invoice, or a proper correction of a document already created |
For physical goods, payment and shipping are deliberately two separate events. For virtual and downloadable products, WooCommerce can complete a paid order directly. Rechnungskit then processes both signals together and takes the stored product classification into account.
Prepayment is not pay by invoice
| Prepayment | Pay by invoice | |
|---|---|---|
| Order of events | payment first, then shipping | shipping and invoice first, then payment |
| WooCommerce start | “On hold” (on-hold) |
depends on the payment method, often “On hold” |
| Payment signal | change to “Processing” | later payment against the open item |
| Invoice | already paid on fulfillment | open with payment terms on fulfillment |
| Payment reminders | not needed | can be set up to run automatically |
That is why a WooCommerce payment method seen in your orders can only be assigned to one of the two flows in Rechnungskit. This prevents a prepayment order from accidentally creating an open receivable, or a pay-by-invoice order from counting as paid before the money actually arrives.
What Rechnungskit does after the status change
WooCommerce reports changes through a signed webhook. Rechnungskit normalizes the order and, for a payment method configured as prepayment, records exactly one synthetic payment. Repeated webhook deliveries do not create duplicates. A regular sync catches changes in case a webhook delivery was delayed.
For physical goods, “Completed” triggers invoicing. The date of supply is the fulfillment date from WooCommerce. The invoice is then validated as ZUGFeRD 2.5, archived to GoBD standards (the German rules for audit-proof bookkeeping) and made available for the DATEV export.
DATEV without a duplicate bank booking
Rechnungskit records the prepayment so that the order and the invoice are linked as paid. It does not, however, export an additional payment booking to DATEV. The real bank receipt is already on your bank statement, and your tax advisor (Steuerkanzlei) books it from there. How the other payments, fees and documents from WooCommerce get to DATEV is explained in the guide WooCommerce DATEV export.
That keeps the split of work clear: Rechnungskit delivers the document with revenue account and tax code, and your tax advisor clears the bank transaction. More about orders, taxes and webhooks is on the WooCommerce integration page. Which mandatory details belong on a WooCommerce invoice and what options exist besides Rechnungskit is covered in the guide Creating invoices in WooCommerce.
FAQ
Rechnungskit is not a tax advisory or law firm. This article explains general principles and does not replace advice from a tax advisor (Steuerberater, § 5 StBerG) or a lawyer (§ 3 RDG). Rechnungskit is built for businesses based in Germany and prepares documents, tax rates and bookings automatically. How your specific case is treated remains your decision, ideally together with your tax advisor or a lawyer.
Ready for the e-invoicing mandate?
Create an account, connect your payment provider, check everything in free test mode. Billing starts when you go live.
Try it now