Guide · WooCommerce

Fulfill WooCommerce orders from your own China suppliers

Install the plugin, map the SKUs you might stock, and let each WooCommerce order line route itself: lines with stock at the China warehouse reserve inventory and dispatch; lines without it wait for the parcel your own supplier ships to your China warehouse address. You approve a packed quote after measurement, and tracking is written back to the order.

Most “China fulfillment” asks you to give something up first: your supplier relationships (sourcing platforms) or cash locked into stock before anything has sold (inventory-first 3PLs). This guide walks the third path end to end — you keep buying from your own suppliers, and each WooCommerce order line routes itself between supplier-parcel forwarding and optional stocked fulfillment.

Last updated: 2026-08-01 · Plugin 0.7.0 · WordPress 6.4+ · WooCommerce 8.2+ · PHP 7.4+ · Reviewed by Alice Zhou

How every order line is routed

Routing happens per line, in the backend, against live inventory — the plugin never treats a cached number as the source of truth. These are all the outcomes a line can have.

What the line looks likeRouting decisionWhat you see on the order
Mapped SKU, enough stock at the warehouseFulfil from stock.Inventory is reserved and a warehouse fulfillment order is raised. Nothing waits on a supplier.
Mapped SKU, no stock or not enoughForwarding required.The order waits for you to enter the domestic tracking number for the parcel your supplier is sending, with quantities allocated per product.
Unmapped product, or one marked “always forward”Forwarding required.Routes as a supplier parcel with no mapping work needed — which is why mapping can be incremental rather than a migration.
One order containing both a stocked line and an unstocked lineMixed — held for your decision.The order pauses on a recorded choice: forward everything, wait for stock, or re-evaluate inventory. It is never split automatically.
A product that needs a SKU link before it can be routedMapping required.The order is surfaced as needing a mapping decision rather than being routed on a guess about which warehouse SKU you meant.
A line excluded from fulfillment (a service, a digital item, a deposit)Excluded.Left alone. It does not create warehouse work and does not block the rest of the order.
Routing cannot resolve — no configured route, invalid SKU, missing dataRouting blocked.The order stops with the reason attached rather than being submitted into a workflow that would fail later at the warehouse.
Wallet balance is short when the work would be createdHeld on balance.New warehouse work waits for a top-up and resumes once funds are available. Shipments already in flight are never held.

The workflow, step by step

  1. 1

    Create the account and connect the store

    Sign up as a merchant, submit the in-account integration application, then install the WooCommerce plugin from WordPress.org and run "Test and connect" with a sandbox key. Activation imports no historical orders and does not read your catalog.

  2. 2

    Map the SKUs you might stock

    Products or variations map to warehouse SKUs. Anything unmapped — or marked "Always forward" — simply routes as supplier parcels, so mapping is incremental, not a migration.

  3. 3

    Take the order; routing happens per line

    When an order reaches processing, each line is checked against live warehouse inventory: enough stock → reserve and fulfill; none → supplier forwarding; mixed → the order pauses for your decision.

  4. 4

    Buy from your supplier, enter the tracking number

    For forwarding lines you order from your own supplier, ship to your WooliiPorter warehouse address, and enter the domestic tracking number with per-product allocation. The forwarding order is created only when allocations cover the line.

  5. 5

    Warehouse receives with evidence

    Arriving parcels are scanned, photographed and measured; contents recorded against the parcel; exceptions flagged at intake instead of discovered at dispatch.

  6. 6

    Approve the packed quote, then track one timeline

    After packing, the measured quote arrives for your approval. Once dispatched, China-leg events and the international carrier merge into one timeline, and the settlement reconciles against the quote line by line.

What stays automatic, what stays yours

Runs without you

  • Per-line routing against live inventory
  • Stock reservation and warehouse fulfillment orders
  • Receiving evidence: scans, photos, measurements
  • Packed quotes from the live rate table
  • Tracking normalization, including reissued numbers
  • Line-item settlement write-back

Always your decision

  • Which suppliers you buy from and what you pay
  • Approving the packed quote before dispatch
  • How a mixed order proceeds (never auto-split)
  • Which SKUs are worth stocking, if any

Honest limits: the plugin is reviewed and listed on the WordPress.org plugin directory at version 0.7.0 (which is distinct from the WooCommerce Marketplace, and it is not represented as Marketplace approved). The Shopify app is listed on the Shopify App Store. Quotes are produced from the measured parcel and the live lane, so the number you approve is the number that was priced.

Every setting the plugin exposes, and its default

Two of these are off until you deliberately turn them on, which is the answer to “what happens the moment I activate it”: nothing.

SettingWhat it does
API key & environmentUse wp_sk_test_… for sandbox and wp_sk_live_… for production. Test and connect verifies the real key environment and refuses a mismatch.
API baseProduction is pinned to https://api.woolii.com/v1/merchant. Developer mode accepts only exact local hosts or code-allowlisted HTTPS origins, preventing credential exfiltration.
Smart routingOff by default. Enables fulfillment intents only after the platform account exposes smartRouting and this Store is registered.
Automatic submissionOff by default. Can be enabled only after connection, environment, scope, Store, webhook-secret and Action Scheduler checks all pass.
Delivery speed preferenceLowest cost | Fastest delivery. WooliiPorter quotes every delivery-time band published for the destination country and picks one by this preference; the chosen band is recorded on the order.
Webhook signing secretRequired in every environment. The receiver verifies HMAC, Store identity, intent identity (when known), timestamp and eventId deduplication before writing order state.

How to verify this before committing anything

Every claim in this guide is checkable on a staging store with a sandbox key, which is the point: none of it should have to be taken on trust.

ClaimHow to check it
The plugin is real and reviewedIt is listed in the WordPress.org plugin directory at version 0.7.0, with a changelog and a downloadable zip you can hash. The directory is distinct from the WooCommerce Marketplace; the plugin is not represented as Marketplace approved.
Activation does not touch your catalog or your historyConnect a staging store. Activation imports no historical orders and does not read your catalog; catalog sync is a separate, explicit step.
Nothing is submitted until you say soAutomatic submission is off by default and can only be turned on after connection, environment, scope, Store registration, webhook secret and scheduler checks all pass.
The sandbox is really a sandboxTest keys and live keys are different prefixes, and “Test and connect” verifies the real environment of the key and refuses a mismatch.
A mixed order is never split silentlyPlace an order with one stocked line and one unstocked line on a sandbox key. It should pause for a recorded decision.
The bill reconciles against what you approvedTake a sandbox order through to settlement and diff the line items against the packed quote you approved.

Common questions

Do I have to give up my suppliers to use a fulfillment service?

Not with this model. You keep choosing suppliers, negotiating prices and paying them directly. The fulfillment layer receives what your suppliers ship to your China warehouse address and coordinates from there — it never buys goods and never touches the purchase payment.

Do I need inventory in China before my first order?

No. A store can run entirely on supplier-parcel forwarding: sell first, buy from your supplier, have them ship to the warehouse, forward to the customer. Stocking is a per-SKU option you add when a product has earned it.

What happens on an order that mixes stocked and unstocked items?

The plugin pauses the order for an explicit decision — forward everything, wait for stock, or re-evaluate inventory. Version 0.7.0 never splits a mixed order automatically, and the choice is recorded on the WooCommerce order.

When do I find out the real shipping cost?

After packing and measurement: the packed parcel is quoted from the live rate table and you approve that quote before dispatch. Earlier estimates are always labelled as estimates, and the final bill reconciles line-by-line against the packed quote.

What happens the moment I activate the plugin?

Nothing to your store. Activation imports no historical orders and does not read your catalog. Smart routing and automatic submission are both off by default, and automatic submission can only be enabled after connection, environment, scope, Store registration, webhook-secret and scheduler checks have all passed.

How is each WooCommerce order line routed?

Against live warehouse inventory, per line, in the backend. A mapped SKU with enough stock reserves inventory and raises a warehouse fulfillment order; a mapped SKU without stock, an unmapped product, or one marked “always forward” routes to supplier forwarding; an order containing both pauses for your recorded decision. Lines that cannot be resolved surface with a reason rather than being submitted on a guess.

What does setup actually require?

Create a merchant account, submit the integration application in-account, and install the plugin (version 0.7.0, WordPress 6.4+ / WooCommerce 8.2+ / PHP 7.4+) with a sandbox key first. Automatic submission stays off until you enable it.

Start with one SKU you have not stocked.

Signup is free and self-serve; sandbox keys open after the in-account application is approved.