{"id":347345,"date":"2026-07-31T10:30:48","date_gmt":"2026-07-31T10:30:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/china-fulfillment-service-by-woolii\/"},"modified":"2026-07-31T11:23:41","modified_gmt":"2026-07-31T11:23:41","slug":"wooliiporter-fulfillment","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/wooliiporter-fulfillment\/","author":23540058,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.5.1","stable_tag":"0.5.1","tested":"7.0.2","requires":"6.4","requires_php":"7.4","requires_plugins":null,"header_name":"WooliiPorter Fulfillment for WooCommerce","header_author":"WooliiPorter","header_description":"Connect WooCommerce to Woolii's technology-native China fulfillment. Smart routing selects warehouse dispatch or supplier parcel forwarding.","assets_banners_color":"05152f","last_updated":"2026-07-31 11:23:41","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/porter.woolii.com\/integrations","header_author_uri":"https:\/\/porter.woolii.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":29,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.5.0":{"tag":"0.5.0","author":"wooliiporter","date":"2026-07-31 10:30:41"},"0.5.1":{"tag":"0.5.1","author":"wooliiporter","date":"2026-07-31 11:23:41"}},"upgrade_notice":{"0.5.0":"<p>The plugin is now named WooliiPorter Fulfillment for WooCommerce. Settings, SKU mappings, and order data are preserved; no reconfiguration is required.<\/p>","0.4.2":"<p>Maintenance release; no configuration changes are required.<\/p>","0.4.1":"<p>Connected stores can now open their linked Woolii merchant console without entering credentials again. Re-run <strong>Test and connect<\/strong> if the store is not recognized, then follow the six-step activation guide.<\/p>","0.4.0":"<p>Action Scheduler and a Webhook Signing Secret are now mandatory readiness checks. Re-run <strong>Test and connect<\/strong> after upgrading, verify the webhook Store and intent identifiers, and review SKU mappings before enabling automatic submission.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3629886,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3629886,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3629886,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3629886,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.5.0","0.5.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3629900,"resolution":"1","location":"assets","locale":"","width":3200,"height":2000},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3629844,"resolution":"2","location":"assets","locale":"","width":2200,"height":1204},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3629844,"resolution":"3","location":"assets","locale":"","width":2200,"height":1906},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3629844,"resolution":"4","location":"assets","locale":"","width":2200,"height":1308},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3629844,"resolution":"5","location":"assets","locale":"","width":3200,"height":2000}},"screenshots":{"1":"Guided setup dashboard with connection status and safe rollout steps.","2":"A stocked order routed to inventory reservation and warehouse fulfillment.","3":"Supplier parcel entry showing the domestic tracking fields, line allocation, and completion guard.","4":"A mixed order held for a safe merchant decision instead of automatic splitting.","5":"Product and variation mapping for intelligent inventory routing."}},"plugin_section":[],"plugin_tags":[39071,13906,6601,3546,286],"plugin_category":[45],"plugin_contributors":[274026],"plugin_business_model":[],"class_list":["post-347345","plugin","type-plugin","status-publish","hentry","plugin_tags-dropshipping","plugin_tags-fulfillment","plugin_tags-inventory","plugin_tags-shipping","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-wooliiporter","plugin_committers-wooliiporter"],"banners":{"banner":"https:\/\/ps.w.org\/wooliiporter-fulfillment\/assets\/banner-772x250.png?rev=3629886","banner_2x":"https:\/\/ps.w.org\/wooliiporter-fulfillment\/assets\/banner-1544x500.png?rev=3629886","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/wooliiporter-fulfillment\/assets\/icon-128x128.png?rev=3629886","icon_2x":"https:\/\/ps.w.org\/wooliiporter-fulfillment\/assets\/icon-256x256.png?rev=3629886","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/wooliiporter-fulfillment\/assets\/screenshot-1.png?rev=3629900","caption":"Guided setup dashboard with connection status and safe rollout steps."},{"src":"https:\/\/ps.w.org\/wooliiporter-fulfillment\/assets\/screenshot-2.png?rev=3629844","caption":"A stocked order routed to inventory reservation and warehouse fulfillment."},{"src":"https:\/\/ps.w.org\/wooliiporter-fulfillment\/assets\/screenshot-3.png?rev=3629844","caption":"Supplier parcel entry showing the domestic tracking fields, line allocation, and completion guard."},{"src":"https:\/\/ps.w.org\/wooliiporter-fulfillment\/assets\/screenshot-4.png?rev=3629844","caption":"A mixed order held for a safe merchant decision instead of automatic splitting."},{"src":"https:\/\/ps.w.org\/wooliiporter-fulfillment\/assets\/screenshot-5.png?rev=3629844","caption":"Product and variation mapping for intelligent inventory routing."}],"raw_content":"<!--section=description-->\n<p><strong>You sell. We handle fulfillment from China to your customers.<\/strong><\/p>\n\n<p>WooliiPorter is a technology-native, end-to-end fulfillment operator, not just an order-management application or a traditional freight forwarder. Woolii combines receiving, warehouse handling, inventory fulfillment, supplier parcel forwarding, packing, dispatch, tracking, and exception handling in China with one digital operating layer for smart routing, live inventory, order state, APIs, signed webhooks, and MCP. Third-party carriers perform transport and customs authorities control clearance while the merchant keeps ownership of its supplier relationships and goods.<\/p>\n\n<p>Smart routing checks each order line against the merchant's routing preference and available Woolii warehouse inventory. Stocked lines use warehouse fulfillment; supplier-direct or unstocked lines wait for the supplier's real domestic tracking number and use parcel forwarding. If one order needs both routes, the plugin pauses it for a recorded merchant decision instead of silently splitting or guessing.<\/p>\n\n<p>Each eligible order becomes one idempotent fulfillment intent. WooliiPorter checks available inventory and product routing preferences, then returns one of three outcomes:<\/p>\n\n<ul>\n<li><strong>Stocked fulfillment:<\/strong> reserve available inventory and create a warehouse fulfillment order.<\/li>\n<li><strong>Supplier forwarding:<\/strong> wait for the merchant to enter the supplier's real domestic China tracking number, then create the forwarding order after all quantities are allocated.<\/li>\n<li><strong>Mixed-order review:<\/strong> hold the order for a merchant decision when some lines can use stock and other lines require supplier forwarding.<\/li>\n<\/ul>\n\n<p>Routing decisions, required actions, child order references, tracking state, and diagnostic request IDs remain attached to the WooCommerce order. The plugin uses WooCommerce CRUD APIs and declares High-Performance Order Storage (HPOS) compatibility.<\/p>\n\n<h4>What the plugin does<\/h4>\n\n<ul>\n<li>Adds a guided setup and connection page under <strong>WooCommerce &gt; WooliiPorter<\/strong>.<\/li>\n<li>Opens the linked Woolii merchant console through a short-lived, single-use sign-in handoff.<\/li>\n<li>Links to merchant access, sign-in, and API credential pages.<\/li>\n<li>Validates the API key, account, environment, scopes, and smartRouting before registering the Store.<\/li>\n<li>Maps WooCommerce products and variations to WooliiPorter skuCode values.<\/li>\n<li>Supports an explicit <strong>Always forward<\/strong> preference for products that are not pre-stocked.<\/li>\n<li>Submits eligible orders through Action Scheduler and shows per-line inventory decisions.<\/li>\n<li>Collects supplier parcel tracking numbers, carrier details, supplier names, notes, and line quantity allocation.<\/li>\n<li>Verifies complete forwarding quantities before a formal forwarding order can be created.<\/li>\n<li>Requires HMAC-signed, Store-bound, idempotent webhook updates.<\/li>\n<li>Holds mixed orders for <strong>Forward all<\/strong>, <strong>Wait for stock<\/strong>, or <strong>Re-evaluate inventory<\/strong> decisions.<\/li>\n<\/ul>\n\n<h4>Safety defaults<\/h4>\n\n<p>Activation does not submit historical orders. Sandbox is the default environment, and smart routing and automatic submission are off by default. Automatic submission remains off until connection, Store registration, Webhook Signing Secret, Action Scheduler, and smartRouting checks pass. Mixed orders are not automatically split, and forwarding confirmation requires real tracking numbers with complete quantity allocation.<\/p>\n\n<h4>Service account required<\/h4>\n\n<p>This free plugin connects a WooCommerce store to WooliiPorter's technology-driven physical fulfillment service. An approved merchant account and API key are required; applications are reviewed manually and the plugin cannot connect until the account is approved. Merchants pay Woolii separately for receiving, warehouse handling, packing, storage, transport, and other selected logistics services. The plugin contains no paid code or feature licensing. Service availability, routes, handling options, shipping charges, storage charges, duties, taxes, and merchant terms are determined by the merchant's WooliiPorter account and the applicable order terms. The plugin itself does not guarantee route availability, customs clearance, delivery times, or fixed shipping rates.<\/p>\n\n<p>Apply at https:\/\/porter.woolii.com\/developers\/apply. Sign in at https:\/\/porter.woolii.com\/auth\/signin and manage credentials at https:\/\/porter.woolii.com\/merchant\/integrations\/credentials.<\/p>\n\n<h3>External service and privacy<\/h3>\n\n<p>This plugin connects to the WooliiPorter Merchant API at <code>https:\/\/api.woolii.com\/v1\/merchant<\/code>. It makes no request until an administrator configures an API key and clicks <strong>Test and connect<\/strong>. That action validates the connection and registers the Store. Order data is sent only after the administrator separately enables or manually requests submission.<\/p>\n\n<p>To register the store and coordinate fulfillment, the plugin may send:<\/p>\n\n<ul>\n<li>The store URL, generated external store ID, platform, plugin version, and WordPress webhook endpoint URL.<\/li>\n<li>WooCommerce order ID, a content-version hash, order currency, and order total.<\/li>\n<li>Product and variation IDs, product names, quantities, WooliiPorter skuCode mappings, routing preferences, and requested service type.<\/li>\n<li>Recipient name, phone number, destination country, region, city, postal code, and street address.<\/li>\n<li>Supplier domestic tracking numbers, carrier, supplier name, notes, and the product quantities assigned to each supplier parcel.<\/li>\n<li>Technical request IDs, idempotency keys, routing actions, and routing-version data needed to prevent duplicate fulfillment.<\/li>\n<\/ul>\n\n<p>WooliiPorter uses this information to register the store, route inventory, reserve stock, receive supplier parcels, arrange forwarding, return tracking and settlement status, prevent duplicate orders, provide support, and prepare carrier and customs declarations. When an authorized operator submits a shipment, carriers and operational providers may receive recipient contact\/address data, package measurements, item descriptions, quantities, declared values, and required declaration fields. Carriers may disclose required declaration information to customs authorities.<\/p>\n\n<p>The API key and webhook secret are stored in WordPress options. Store identity, diagnostics, SKU mappings, fulfillment status, request IDs, supplier parcel references, and tracking state are stored in options, transients, or WooCommerce order metadata. Deactivation stops new scheduled submissions. Uninstall removes credentials and plugin settings but retains WooCommerce order metadata and notes as merchant audit records. Rotate credentials before transferring or decommissioning a store.<\/p>\n\n<p>The plugin does not add advertising trackers and does not send executable code from the service. API responses are operational data, not remotely executed PHP or JavaScript.<\/p>\n\n<p>Review the service terms and privacy policy before connecting a production store:<\/p>\n\n<ul>\n<li>Terms: https:\/\/porter.woolii.com\/terms<\/li>\n<li>Privacy: https:\/\/porter.woolii.com\/privacy<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate WooCommerce.<\/li>\n<li>Upload the <code>wooliiporter-fulfillment<\/code> folder or plugin ZIP through <strong>Plugins &gt; Add New &gt; Upload Plugin<\/strong>.<\/li>\n<li>Activate <strong>WooliiPorter Fulfillment for WooCommerce<\/strong>.<\/li>\n<li>Open <strong>WooCommerce &gt; WooliiPorter<\/strong>.<\/li>\n<li>Create a sandbox API key, enter it, and click <strong>Test and connect<\/strong>.<\/li>\n<li>Configure the same Webhook Signing Secret in the plugin and merchant console.<\/li>\n<li>Map stocked products to WooliiPorter skuCode values; mark non-stocked products as <strong>Always forward<\/strong>.<\/li>\n<li>Enable smart routing and test stocked, forwarding, and mixed orders in sandbox before enabling automatic submission.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20have%20to%20store%20every%20product%20at%20the%20wooliiporter%20warehouse%3F\"><h3>Do I have to store every product at the WooliiPorter warehouse?<\/h3><\/dt>\n<dd><p>No. A product can use real-time stocked fulfillment when inventory exists, or be marked for supplier forwarding when the supplier will ship it to the China warehouse after the customer order is placed.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20only%20part%20of%20an%20order%20is%20in%20stock%3F\"><h3>What happens when only part of an order is in stock?<\/h3><\/dt>\n<dd><p>This release holds the order for merchant review. The merchant can forward the whole order, wait for stock, or re-evaluate inventory. The plugin does not automatically split a mixed order.<\/p><\/dd>\n<dt id=\"can%20the%20plugin%20create%20a%20forwarding%20order%20before%20i%20have%20the%20supplier%20tracking%20number%3F\"><h3>Can the plugin create a forwarding order before I have the supplier tracking number?<\/h3><\/dt>\n<dd><p>No. You can save supplier parcel details as a draft, but a formal forwarding order is created only after real tracking numbers are entered and the complete forwarding quantity is allocated.<\/p><\/dd>\n<dt id=\"does%20activating%20the%20plugin%20send%20my%20existing%20orders%3F\"><h3>Does activating the plugin send my existing orders?<\/h3><\/dt>\n<dd><p>No. Smart routing and automatic submission are disabled by default, and activation does not submit historical orders.<\/p><\/dd>\n<dt id=\"does%20this%20plugin%20calculate%20duties%2C%20taxes%2C%20or%20guarantee%20customs%20clearance%3F\"><h3>Does this plugin calculate duties, taxes, or guarantee customs clearance?<\/h3><\/dt>\n<dd><p>No. Customs requirements, route eligibility, duties, taxes, and final carrier charges depend on the goods, destination, carrier, and current service terms. Contact WooliiPorter support for regulated or uncertain goods before shipping.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.5.1<\/h4>\n\n<ul>\n<li>Updated the settings page with the Woolii brand mark and end-to-end fulfillment positioning.<\/li>\n<\/ul>\n\n<h4>0.5.0<\/h4>\n\n<ul>\n<li>Renamed the plugin to WooliiPorter Fulfillment for WooCommerce and moved the text domain to <code>wooliiporter-fulfillment<\/code>.<\/li>\n<li>Replaced the static activation guide with the live seven-step onboarding checklist shared with the Woolii merchant console, including warehouse stocking and wallet funding guidance via the existing console sign-in handoff.<\/li>\n<li>Added one-click catalog sync: published products are registered with Woolii and linked to warehouse SKUs by exact SKU match; linked products missing a WooCommerce SKU receive the warehouse code.<\/li>\n<li>Added optional one-way inventory push: linked product stock is overwritten with the warehouse available quantity every five minutes. WooCommerce stock is never read back.<\/li>\n<li>Registered the order-panel stylesheet and script with <code>wp_enqueue_style<\/code>, <code>wp_enqueue_script<\/code>, and <code>wp_localize_script<\/code> instead of printing them inline, and loaded them only on the order edit screen.<\/li>\n<li>Replaced the inline parcel <code>&lt;script type=\"text\/template\"&gt;<\/code> markup with a standard HTML <code>&lt;template&gt;<\/code> element.<\/li>\n<li>Limited the blocked-automation administrator notice to the WooliiPorter settings, order, and plugins screens.<\/li>\n<li>Removed bundled translation files so translations come from translate.wordpress.org.<\/li>\n<\/ul>\n\n<h4>0.4.2<\/h4>\n\n<ul>\n<li>Switched the merchant-console handoff to wp_safe_redirect with an explicit allowed-hosts list, per WordPress Plugin Check guidance.<\/li>\n<\/ul>\n\n<h4>0.4.1<\/h4>\n\n<ul>\n<li>Added the unified six-step activation guide used across WooCommerce, Shopify, and the Woolii merchant console.<\/li>\n<li>Added a server-side, single-use sign-in handoff to the linked Woolii merchant account.<\/li>\n<li>Restricted console handoff URLs to the trusted Woolii host and exact SSO exchange path.<\/li>\n<li>Kept channel product synchronization separate from warehouse SKU creation and made SKU linking explicit.<\/li>\n<\/ul>\n\n<h4>0.4.0<\/h4>\n\n<ul>\n<li>Moved the official Merchant API endpoint to <code>https:\/\/api.woolii.com\/v1\/merchant<\/code>.<\/li>\n<li>Added complete English gettext source strings and bundled Simplified Chinese translations.<\/li>\n<li>Added safe initialization and an administrator notice when WooCommerce is missing, inactive, or too old.<\/li>\n<li>Added WordPress 7.0 compatibility metadata (validated on 7.0.2), WooCommerce 10.9.4, PHP 7.4, and WooCommerce 8.2 minimum compatibility metadata.<\/li>\n<li>Persisted SKU mappings submitted through the custom connection form.<\/li>\n<li>Required HMAC verification and exact Store identity for every webhook environment, plus intent identity when a local intent exists.<\/li>\n<li>Added Action Scheduler to readiness checks and removed synchronous submission fallback.<\/li>\n<li>Added deactivation cleanup for cron, Action Scheduler jobs, and the SKU cache.<\/li>\n<li>Replaced the internal HPOS controller with the public OrderUtil API and removed deferred Abilities code.<\/li>\n<\/ul>","raw_excerpt":"Connect WooCommerce to Woolii&#039;s technology-native China fulfillment: smart routing for warehouse dispatch or supplier forwarding.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/347345","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=347345"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/wooliiporter"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=347345"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=347345"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=347345"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=347345"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=347345"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=347345"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}