Title: Weproc French E-Invoicing for WooCommerce
Author: vswom83
Published: <strong>August 27, 2026</strong>
Last modified: August 27, 2026

---

Search plugins

![](https://ps.w.org/weproc-french-einvoicing/assets/banner-772x250.png?rev=3668890)

![](https://ps.w.org/weproc-french-einvoicing/assets/icon-256x256.png?rev=3668890)

# Weproc French E-Invoicing for WooCommerce

 By [vswom83](https://profiles.wordpress.org/vswom83/)

[Download](https://downloads.wordpress.org/plugin/weproc-french-einvoicing.0.7.3.zip)

 * [Details](https://wordpress.org/plugins/weproc-french-einvoicing/#description)
 * [Reviews](https://wordpress.org/plugins/weproc-french-einvoicing/#reviews)
 *  [Installation](https://wordpress.org/plugins/weproc-french-einvoicing/#installation)
 * [Development](https://wordpress.org/plugins/weproc-french-einvoicing/#developers)

 [Support](https://wordpress.org/support/plugin/weproc-french-einvoicing/)

## Description

From 1 September 2026, French businesses must receive electronic invoices, and
 
issuing them becomes mandatory in turn. An invoice between two French businesses
no longer travels as a PDF by e-mail: it travels through a _plateforme agréée_ (
PA), a platform registered by the tax administration.

WeInvoice is one of those platforms — registered under number 0104. This plugin

connects your shop to it directly. There is no intermediary, no third-party account
to open and no government API key to request: your shop talks to the platform that
files the invoice.

#### What it does

 * Turns a qualifying WooCommerce order into a compliant electronic invoice and 
   files it through WeInvoice, in the background, without ever slowing a customer’s
   checkout.
 * Numbers your invoices in one unbroken sequence, or keeps your own if you already
   have one.
 * Creates the credit note a refund owes — automatically, for a partial refund as
   well as a full one.
 * Shows the official lifecycle of each invoice on the order screen — deposited,
   received, made available, approved, refused, paid — in the regulatory vocabulary,
   not a re-invented one.
 * Checks at checkout whether a business customer is reachable in the French PPF
   directory, so you know before the order is placed rather than after a rejection.
 * Gives you one screen — WooCommerce → WeInvoice — that says where every invoice
   stands: what is waiting, what is in progress, what stopped and why, in plain 
   language, with a button to send a stopped document again once you have fixed 
   what caused it.
 * Warns you, on that same screen, when nothing on your server is starting the background
   queue: your invoices would then leave late, and an electronic invoice is owed
   within 24 hours.

#### What it deliberately does not do

**B2C orders never leave your shop.** An order whose buyer is a private
 individual,
or whose SIREN is not registered in the PPF directory, produces no electronic invoice
and **no request of any kind**. It is counted on the WooCommerce → WeInvoice screen
so you can see exactly how much of your business is not covered, and that count 
stays on your server. The regulation handles those sales through _e-reporting_, 
which this version does not cover: if you sell to consumers you still owe that declaration
by another route, and this plugin will never pretend otherwise.

It is also not a cash-register system: it does not take payments, does not keep 
a
 till and records no settlement of its own.

#### Requirements

 * A WeInvoice account with an API key.
 * WordPress 6.8 or later, WooCommerce 8.2 or later, PHP 7.4 or later.
 * Sellers established in France, invoicing French business customers.

### External Services

This plugin connects to **one** external service, and to nothing else. There is

no analytics service, no error-reporting service, no relay and no telemetry of any
kind.

#### WeInvoice (api.weinvoice.fr)

**Who operates it.** Weproc SAS, France — the _plateforme agréée_ n°0104 that
 files
your invoices with the tax administration.

**What it is used for.** Filing your electronic invoices and the credit notes
 your
refunds owe, reading their regulatory lifecycle statuses back, and checking whether
a business customer is registered in the French PPF directory.

**When data is sent.** Never before you have entered your own WeInvoice API key

on the plugin’s settings screen. Once you have, `https://api.weinvoice.fr` is contacted
in five situations, and no other:

 1. When you save your credentials or press _Test the connection_ — your API key is
    exchanged for a short-lived access token, and your account is asked which company
    invoices for this shop.
 2. When you save your credentials — the shop subscribes to the status updates of its
    own invoices, which is what makes situation 5 possible.
 3. When a business customer has entered a SIREN and the order is placed — that SIREN
    alone is sent, to check whether the company is reachable.
 4. When an order whose buyer carries a directory-registered SIREN reaches the _processing_
    or _completed_ status, and when such an order is refunded — that document’s invoice
    data is sent. This happens in a background job, never while a page is being served.
 5. While one of your invoices is still in flight — its status is read back, at most
    hourly on the first day and much less often afterwards, and not at all once it 
    is settled.

**What data is sent.** In situation 3, a SIREN. In situation 4, the data an
 electronic
invoice legally carries: your own identification, the business customer’s identification(
SIREN/SIRET, company name, billing address), the order lines with their amounts 
and VAT, the totals and the payment terms.

**What is never sent.** Orders placed by private individuals, orders whose buyer

carries no registered SIREN, your shop’s traffic, your customer list, your products,
and the count of out-of-perimeter orders itself.

 * Service: https://weinvoice.fr
 * Terms of service: https://weinvoice.fr/cgu
 * Privacy policy: https://weinvoice.fr/politique-de-confidentialite

In situation 3, the SIREN is checked **at most once a day per company**: the
 answer
is remembered on your own server, and a customer typing does not trigger anything—
the check happens when the order is placed. If it cannot be made, the order goes
through anyway; nothing at your checkout ever depends on our availability.

## Screenshots

[⌊The connection screen: the API key is stored and the company invoicing for the
shop is recognised.⌉⌊The connection screen: the API key is stored and the company
invoicing for the shop is recognised.⌉[

The connection screen: the API key is stored and the company invoicing for the shop
is recognised.

[⌊The "SIREN number" field in the checkout, here on the block-based checkout.⌉⌊The"
SIREN number" field in the checkout, here on the block-based checkout.⌉[

The “SIREN number” field in the checkout, here on the block-based checkout.

[⌊The regulatory status on the order screen: "212 Encaissée", with its official 
French code and label.⌉⌊The regulatory status on the order screen: "212 Encaissée",
with its official French code and label.⌉[

The regulatory status on the order screen: “212 Encaissée”, with its official French
code and label.

[⌊The WeInvoice column in the order list: what is settled, and what is still in 
transit.⌉⌊The WeInvoice column in the order list: what is settled, and what is still
in transit.⌉[

The WeInvoice column in the order list: what is settled, and what is still in transit.

[⌊The WooCommerce -> WeInvoice screen: the queue, what is stopped and why, and what
the plugin does not cover.⌉⌊The WooCommerce -> WeInvoice screen: the queue, what
is stopped and why, and what the plugin does not cover.⌉[

The WooCommerce -> WeInvoice screen: the queue, what is stopped and why, and what
the plugin does not cover.

## Installation

 1. Install and activate WooCommerce first — this plugin requires it and WordPress 
    will not activate it without it.
 2. Install this plugin from the WordPress plugin directory, or upload the ZIP under
    _Plugins  Add New  Upload Plugin_.
 3. Activate it.
 4. Go to _WooCommerce  Settings  Integrations  WeInvoice_.
 5. Paste the API key issued in your WeInvoice space, choose the environment, and save.
    Nothing is sent anywhere before that moment.
 6. Check the _Invoice numbering_ setting on the same screen. Leave it on WeInvoice
    unless your shop already gives its orders real invoice numbers through another 
    extension.

## FAQ

### Do I need an account with a government portal?

No. WeInvoice is itself a _plateforme agréée_; your shop talks to it, and it
 files
with the administration. You need a WeInvoice account, nothing else.

### Who gives my invoices their numbers?

WeInvoice does, unless you tell it otherwise. An invoice number cannot be reused

and the sequence must not skip numbers, and a plain WooCommerce order number is 
neither of those: it is a website reference your shop shares with its pages, media
and coupons, so it jumps whenever you publish anything else — and two shops belonging
to the same company would produce the same one. Leaving the numbering to WeInvoice
gives you one unbroken series.

Choose _This shop_ only if you already run an extension that gives your orders
 
real invoice numbers; the plugin then sends the number your shop displays, and nothing
about your series changes.

Whichever you choose, the order number always travels on the invoice as your own

reference, so you can find the order back from it.

### I already had this plugin connected. Did the update renumber my invoices?

No. A shop that was already connected keeps numbering its own invoices, exactly

as before. The new setting is on the connection screen if you want to switch.

### What happens to my orders from private customers?

Nothing leaves your shop. They are counted locally so that you can see them, and

that is all. Those sales fall under _e-reporting_, which this version does not handle.

### Where do my business customers enter their SIREN?

In an optional _Company SIREN number_ field the plugin adds to the additional
 information
section of your checkout — both the classic one and the block one. A customer who
leaves it blank orders exactly as before: the field never blocks a sale. A number
that is not nine valid digits is refused on the spot, while the customer is still
on the page, rather than after the order is placed.

### I already use the EU VAT Number extension. Do my customers have to type their SIREN again?

No. A French VAT number contains the company’s SIREN, so the plugin reads the
 number
that extension already stores and uses it. A VAT number issued in another country
is left alone: its digits belong to a company in that country’s register, not to
a French one, so no invoice is ever built from it.

### What if a customer’s SIREN is not in the PPF directory yet?

The order goes through and stays on your shop: it is marked out of perimeter and

counted, and nothing about it is sent anywhere. If the check itself could not be
made — your server offline, ours busy — the order is simply left undecided and sorted
out when its invoice is filed. Your checkout never fails because of us.

### A refund happened. Do I have to do anything?

No. A refund creates the credit note it owes, automatically, for a partial refund

as well as a full one — nothing to tick and no e-mail to send.

### Does it slow down my shop?

No. Nothing is sent while an order is being saved: the order is put in a queue
 
and the sending happens in the background, so a slow or unavailable service can 
never delay or break a customer’s checkout.

### An invoice did not leave. What happens?

It is retried on its own, with a growing delay, for up to four days — long enough

for you to sign a missing mandate, settle an account or switch on a setting and 
have the invoice leave without touching anything. Every attempt is recorded on the
order itself, successes and failures alike, and stays there as long as the order
does.

### Does it work with high-performance order storage (HPOS)?

Yes. The plugin declares compatibility with HPOS and reads and writes orders
 exclusively
through the WooCommerce CRUD.

### Does it work with the block-based checkout?

Yes. Compatibility with the cart and checkout blocks is declared, and the
 business-
customer field is registered for both the block and the classic checkout.

### Where do I get an API key?

In your WeInvoice space, under _Espace développeur_. The key is displayed once,

in the `client_id.secret` form; paste it whole into the plugin’s settings screen.
It is stored on your own server, is never displayed again and is removed when you
uninstall the plugin.

### The plugin says my site seems to be hosted outside the European Union. What does that mean?

Your shop’s request never reached WeInvoice: it was stopped by the filtering
 device
in front of the platform, which the French e-invoicing conformity rules require.
Invoicing data must stay inside the EU, so a shop whose server makes its outbound
connections from outside it cannot file invoices. Ask your host which country your
site connects out from — nothing on your WeInvoice account needs changing.

### Where is my data hosted?

On WeInvoice’s infrastructure, in the European Union. See the privacy policy
 linked
above.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“Weproc French E-Invoicing for WooCommerce” is open source software. The following
people have contributed to this plugin.

Contributors

 *   [ vswom83 ](https://profiles.wordpress.org/vswom83/)

[Translate “Weproc French E-Invoicing for WooCommerce” into your language.](https://translate.wordpress.org/projects/wp-plugins/weproc-french-einvoicing)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/weproc-french-einvoicing/),
check out the [SVN repository](https://plugins.svn.wordpress.org/weproc-french-einvoicing/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/weproc-french-einvoicing/)
by [RSS](https://plugins.trac.wordpress.org/log/weproc-french-einvoicing/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 0.7.3

 * wordpress.org review: the vendored SDK revision stamp is now `SDK-REVISION.txt`(
   extension-less files are not permitted in the directory). No functional change.

#### 0.7.2

 * wordpress.org review: drop the Update URI header (directory-hosted plugins must
   not carry it), fix the Plugin URI, ship the .pot only (translations come from
   translate.wordpress.org).

#### 0.7.1

 * A rejected invoice now tells you why. The reason does not travel with the status:
   the plugin asks for it separately, the moment a rejection lands. That second 
   read was being cancelled by the rule that never asks twice about a settled invoice—
   so the order screen could show “213 Rejetée” and nothing to act on. The reason
   is now fetched once, is not lost if the attempt fails, and the invoice stops 
   being read as soon as it arrives.

#### 0.7.0

 * A company number your customer types at the checkout is no longer refused on 
   its check digit. Whether a company can be invoiced is decided by the official
   business directory, and some real French company numbers do not satisfy that 
   key — so refusing them at the till turned business orders into ordinary sales
   without anything erroring. A number that is not nine digits is still refused,
   and a number the directory does not list is still left out of scope, with the
   reason named on the WeInvoice screen.
 * A shop that WeInvoice cannot reach — behind a firewall, on an intranet, on a 
   local install — no longer shows a blank status for an invoice that has in fact
   been filed. It reads the full lifecycle back, including the moment the regulatory
   data reaches the public portal, exactly as a reachable shop is told it.
 * First release exercised end to end against a real WeInvoice environment: a real
   order, a real invoice, a real credit note.

#### 0.6.0

 * WeInvoice now numbers your invoices by default, in one unbroken sequence. A WooCommerce
   order number is a website reference whose sequence skips numbers, which an invoice
   number must not do.
 * A new setting on the connection screen lets a shop that already produces real
   invoice numbers keep sending its own.
 * A shop that was already connected keeps its own numbering: nothing is renumbered
   by this update.
 * If your WeInvoice account is not set to number invoices, the connection screen
   now says so, with a link to the switch — and invoices wait for you instead of
   being given up on.
 * One screen — WooCommerce → WeInvoice — now says where every invoice stands: what
   is waiting, what stopped and why, and how much of your business this connector
   does not cover.
 * First release published to the WordPress plugin directory.

#### 0.5.0

 * The official lifecycle of each invoice now appears on the order screen and in
   a column of the order list — the regulatory code and its French label, “212 Encaissée”
   and not “paid”.
 * A finished invoice is shown apart from one still in flight, so a glance down 
   the order list separates what is settled from what is not.
 * When an invoice is rejected or refused, the reason is shown in plain language,
   with a button to send a corrected one.
 * Statuses arrive as they happen, over a signed channel your shop subscribes to
   when you connect it.
 * A shop that cannot be reached from the internet — behind a firewall, on an intranet,
   on a staging site — is not left in the dark: it asks WeInvoice instead, often
   on the first day and rarely afterwards, and stops asking once an invoice is settled.

#### 0.4.0

 * Invoices are now sent. An order that reaches _Processing_ or _Completed_ is queued
   for emission — including one paid by bank transfer, cheque or on delivery, which
   many connectors miss because nothing marks them paid automatically.
 * Nothing is sent while the order is being saved: the order is put in a queue and
   the sending happens in the background, so a slow or unavailable service can never
   delay or break a customer’s checkout.
 * If the sending fails it is retried on its own, with a growing delay, for up to
   four days — long enough for you to sign a missing mandate or settle an account
   and have the invoice leave without touching anything.
 * A refund creates a credit note, automatically, for a partial refund as well as
   a full one. Nothing to tick and no e-mail to send.
 * An order that reaches _Processing_ and later _Completed_ is invoiced once, never
   twice.
 * Every attempt is recorded on the order itself, successes and failures alike, 
   and stays there for as long as the order does.
 * Orders from private customers still produce no request of any kind.

#### 0.3.0

 * Adds an optional _Company SIREN number_ field to the checkout — both the classic
   checkout and the block-based one.
 * The number is checked as it is submitted: nine digits and a valid check key, 
   with the error shown on the spot rather than after the order.
 * Business customers are recognised from the EU VAT Number extension too, when 
   your shop uses it: a French VAT number contains the SIREN. A VAT number from 
   another country is never turned into one.
 * Each order is marked as covered or not covered, on the order itself, so the invoice
   queue of the next release has nothing to work out again.
 * Orders from private customers still produce no request of any kind — the check
   runs only for an order that carries a valid SIREN, at most once a day per company,
   and never while a customer is typing.
 * If the check cannot be made the order goes through anyway; your checkout never
   depends on our availability.

#### 0.2.0

 * Connect the shop: paste your WeInvoice API key on the integration screen, pick
   the environment, and check the connection.
 * The company invoicing for the shop is resolved automatically when the key carries
   only one, and asked for otherwise.
 * Every refusal is explained in plain language, with a link to the WeInvoice screen
   that settles it — including a site hosted outside the European Union, a plan 
   without API access, and each missing regulatory prerequisite.
 * A “Test the connection” button re-runs the check without changing anything.
 * The API key is stored on your server in a row WordPress does not preload, is 
   never displayed again, and is deleted on uninstall.

#### 0.1.0

 * First skeleton release: WooCommerce integration screen, translations, HPOS and
   cart/checkout-blocks compatibility declarations. No connection and no outbound
   request yet.

## Meta

 *  Version **0.7.3**
 *  Last updated **11 hours ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.8 or higher **
 *  Tested up to **7.1**
 *  PHP version ** 7.4 or higher **
 * Tags
 * [e-invoicing](https://wordpress.org/plugins/tags/e-invoicing/)[factur-x](https://wordpress.org/plugins/tags/factur-x/)
   [France](https://wordpress.org/plugins/tags/france/)[invoice](https://wordpress.org/plugins/tags/invoice/)
   [woocommerce](https://wordpress.org/plugins/tags/woocommerce/)
 *  [Advanced View](https://wordpress.org/plugins/weproc-french-einvoicing/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/weproc-french-einvoicing/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/weproc-french-einvoicing/reviews/)

## Contributors

 *   [ vswom83 ](https://profiles.wordpress.org/vswom83/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/weproc-french-einvoicing/)