{"id":393637,"date":"2026-11-07T13:24:26","date_gmt":"2026-11-07T13:24:26","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/api-connector-for-woocommerce\/"},"modified":"2026-11-07T14:05:25","modified_gmt":"2026-11-07T14:05:25","slug":"storedispatcher-outbound-integration-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/storedispatcher-outbound-integration-for-woocommerce\/","author":8935584,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.1.1","stable_tag":"0.1.1","tested":"7.1.4","requires":"6.4","requires_php":"8.1","requires_plugins":null,"header_name":"StoreDispatcher - Outbound Integration for WooCommerce","header_author":"Mary Glo De La Pedra","header_description":"Send WooCommerce order data to external REST APIs with configurable authentication, field mapping, retries, and request logs.","assets_banners_color":"","last_updated":"2026-11-07 14:05:25","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/paypal.me\/mgdelapedra","header_plugin_uri":"https:\/\/github.com\/maryglo\/api-connector-for-woocommerce","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":162,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","faq","changelog"],"tags":{"0.1.1":{"tag":"0.1.1","author":"glowkazaf","date":"2026-11-07 14:05:25","revision":3789703}},"upgrade_notice":{"0.1.1":"<p>Configure <code>WCAC_ENCRYPTION_KEY<\/code> before saving API credentials.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.jpg":{"filename":"icon-128x128.jpg","revision":3789624,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.jpg":{"filename":"icon-256x256.jpg","revision":3789624,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.1.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3789578,"resolution":"1","location":"assets","locale":"","width":752,"height":652},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3789578,"resolution":"2","location":"assets","locale":"","width":1370,"height":690},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3789578,"resolution":"3","location":"assets","locale":"","width":1430,"height":666},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3789578,"resolution":"4","location":"assets","locale":"","width":942,"height":650},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3789578,"resolution":"5","location":"assets","locale":"","width":1357,"height":515}},"screenshots":{"1":"Configure the API connection, authentication method, and order event settings.","2":"Map order fields to nested API fields and line-item arrays.","3":"Review the full order mapping table and save the field mappings.","4":"Preview the JSON payload generated from the saved mapping.","5":"Review integration logs, request statuses, and attempt counts."}},"plugin_section":[],"plugin_tags":[1556,597,16281,23853,286],"plugin_category":[45],"plugin_contributors":[291365],"plugin_business_model":[],"class_list":["post-393637","plugin","type-plugin","status-publish","hentry","plugin_tags-api","plugin_tags-integration","plugin_tags-orders","plugin_tags-rest-api","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-glowkazaf","plugin_committers-glowkazaf"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/storedispatcher-outbound-integration-for-woocommerce\/assets\/icon-128x128.jpg?rev=3789624","icon_2x":"https:\/\/ps.w.org\/storedispatcher-outbound-integration-for-woocommerce\/assets\/icon-256x256.jpg?rev=3789624","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/storedispatcher-outbound-integration-for-woocommerce\/assets\/screenshot-1.png?rev=3789578","caption":"Configure the API connection, authentication method, and order event settings."},{"src":"https:\/\/ps.w.org\/storedispatcher-outbound-integration-for-woocommerce\/assets\/screenshot-2.png?rev=3789578","caption":"Map order fields to nested API fields and line-item arrays."},{"src":"https:\/\/ps.w.org\/storedispatcher-outbound-integration-for-woocommerce\/assets\/screenshot-3.png?rev=3789578","caption":"Review the full order mapping table and save the field mappings."},{"src":"https:\/\/ps.w.org\/storedispatcher-outbound-integration-for-woocommerce\/assets\/screenshot-4.png?rev=3789578","caption":"Preview the JSON payload generated from the saved mapping."},{"src":"https:\/\/ps.w.org\/storedispatcher-outbound-integration-for-woocommerce\/assets\/screenshot-5.png?rev=3789578","caption":"Review integration logs, request statuses, and attempt counts."}],"raw_content":"<!--section=description-->\n<p>A lightweight, configurable plugin for connecting WooCommerce stores to external REST APIs.<\/p>\n\n<p>The plugin sends order data when an order is created or completed. Store owners can configure the API connection, authentication, event triggers, and order field mappings in WordPress admin.<\/p>\n\n<p>Configure the API connection, authentication, events, and field mappings directly from the WordPress admin.<\/p>\n\n\n\n<h3>Features<\/h3>\n\n<h3>WooCommerce Integration<\/h3>\n\n<ul>\n<li>Connect WooCommerce to any REST API endpoint<\/li>\n<li>Support configurable API base URLs<\/li>\n<li>Bearer token authentication<\/li>\n<li>API key authentication<\/li>\n<li>Test API connectivity from the WordPress admin<\/li>\n<\/ul>\n\n<h3>Order Events<\/h3>\n\n<ul>\n<li>Detect newly created WooCommerce orders<\/li>\n<li>Detect completed orders<\/li>\n<li>Process integration requests asynchronously<\/li>\n<li>Queue requests using Action Scheduler<\/li>\n<li>Automatic retry handling for failed requests<\/li>\n<\/ul>\n\n<h3>Flexible Field Mapping<\/h3>\n\n<p>Map WooCommerce order data to the structure required by your external API.<\/p>\n\n<p>Example:<\/p>\n\n<pre><code>WooCommerce Field              API Field\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nOrder ID                       order_id\nOrder Number                   order.reference\nOrder Status                   order.status\nCurrency                       order.currency\nOrder Total                    order.total\nBilling Email                  customer.email\nBilling First Name             customer.first_name\nBilling Last Name              customer.last_name\n<\/code><\/pre>\n\n<p>The mapping engine supports nested destination structures such as <code>customer.email<\/code>, <code>customer.address.city<\/code>, and <code>order.shipping.postcode<\/code>.<\/p>\n\n<p>Line items can also be mapped into arrays. For example, map <code>items[].sku<\/code>, <code>items[].name<\/code>, <code>items[].quantity<\/code>, and <code>items[].price<\/code>.<\/p>\n\n<h3>Integration Logging<\/h3>\n\n<p>Track integration requests and their results, including:<\/p>\n\n<ul>\n<li>Request status<\/li>\n<li>HTTP response status<\/li>\n<li>Attempt count<\/li>\n<li>Error information<\/li>\n<li>Processing timestamps<\/li>\n<\/ul>\n\n<p>Sensitive authentication credentials are not included in integration logs.<\/p>\n\n<h3>Testing Tools<\/h3>\n\n<p>Test the integration before sending real order data.<\/p>\n\n<ul>\n<li>Test API connection<\/li>\n<li>Generate a payload from an existing WooCommerce order<\/li>\n<li>Inspect the generated JSON<\/li>\n<li>Send test requests<\/li>\n<li>Review API responses<\/li>\n<\/ul>\n\n<h3>High-Performance Order Storage<\/h3>\n\n<p>The plugin is designed to work with WooCommerce High-Performance Order Storage (HPOS).<\/p>\n\n<p>Orders are accessed through WooCommerce's order APIs rather than directly querying WordPress post tables.<\/p>\n\n\n\n<h3>Architecture<\/h3>\n\n<p>The plugin follows a simple integration pipeline:<\/p>\n\n<pre><code>                  WooCommerce\n                       \u2502\n                       \u25bc\n                 Order Event\n                       \u2502\n                       \u25bc\n              Integration Job\n                       \u2502\n                       \u25bc\n                Mapping Engine\n                       \u2502\n             \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n             \u2502                   \u2502\n       Field Resolver       Transformer\n             \u2502                   \u2502\n             \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n                       \u25bc\n                 JSON Payload\n                       \u2502\n                       \u25bc\n                  API Client\n                       \u2502\n                       \u25bc\n              External REST API\n                       \u2502\n                       \u25bc\n               Integration Log\n<\/code><\/pre>\n\n<p>The integration is intentionally separated into independent components so the API client, mapping engine, event handling, and logging can evolve independently.<\/p>\n\n\n\n<h3>From GitHub<\/h3>\n\n<p>Clone the repository:<\/p>\n\n<pre><code>git clone https:\/\/github.com\/maryglo\/api-connector-for-woocommerce.git\n<\/code><\/pre>\n\n<p>The installable ZIP includes Composer's generated runtime autoloader; Composer is not required on the WordPress server. To build the ZIP from source, use PHP 8.1 or newer, run this from the repository root in PowerShell, then upload the ZIP under <strong>Plugins \u2192 Add Plugin \u2192 Upload Plugin<\/strong>:<\/p>\n\n<pre><code>.\\scripts\\build-plugin.ps1\n<\/code><\/pre>\n\n<p>The ZIP is written to <code>build\/storedispatcher-outbound-integration-for-woocommerce.zip<\/code>. It includes <code>composer.json<\/code>, <code>composer.lock<\/code>, and the generated <code>vendor\/<\/code> autoloader. The icon and screenshots remain in the source <code>assets\/<\/code> folder and are excluded from the ZIP; the admin CSS and JavaScript are included.<\/p>\n\n<p>After installing the ZIP, activate <strong>StoreDispatcher - Outbound Integration for WooCommerce<\/strong> under <strong>WordPress Admin \u2192 Plugins \u2192 Installed Plugins<\/strong>.<\/p>\n\n<h3>Requirements<\/h3>\n\n<ul>\n<li>WordPress 6.4 or newer<\/li>\n<li>WooCommerce 11.1.0<\/li>\n<li>PHP 8.1 or newer<\/li>\n<li>PHP Sodium extension<\/li>\n<li>HTTPS recommended for production API communication<\/li>\n<\/ul>\n\n<h3>Compatibility<\/h3>\n\n<p>This plugin is currently developed and tested with:<\/p>\n\n<ul>\n<li><strong>WordPress:<\/strong> 7.1<\/li>\n<li><strong>WooCommerce:<\/strong> 11.1.0<\/li>\n<li><strong>PHP:<\/strong> 8.1+<\/li>\n<li><strong>WooCommerce HPOS:<\/strong> Supported<\/li>\n<\/ul>\n\n<p>Test the plugin in a staging environment before deploying it to a production store.<\/p>\n\n<h3>Configuration<\/h3>\n\n<p>After activating the plugin, open:<\/p>\n\n<pre><code>WordPress Admin\n\u2192 WooCommerce\n\u2192 API Connector\n<\/code><\/pre>\n\n<p>Configure:<\/p>\n\n<pre><code>API Connection\n\u251c\u2500\u2500 API Name\n\u251c\u2500\u2500 API Base URL\n\u251c\u2500\u2500 Health Path\n\u251c\u2500\u2500 Authentication method\n\u251c\u2500\u2500 API credentials\n\u2514\u2500\u2500 Connection test\n\nOrder Events\n\u251c\u2500\u2500 Order created\n\u2514\u2500\u2500 Order completed\n\nEndpoints\n\u2514\u2500\u2500 Order endpoint\n\nField Mapping\n\u251c\u2500\u2500 Order fields\n\u2514\u2500\u2500 Line-item fields\n<\/code><\/pre>\n\n<p>Save the configuration and use the built-in connection test to verify communication with the external API.<\/p>\n\n<h3>Required encryption key<\/h3>\n\n<p>Before saving API credentials, configure a dedicated encryption key in <code>wp-config.php<\/code>.<\/p>\n\n<p>The plugin uses this key to encrypt API credentials before storing them in the WordPress database.<\/p>\n\n<p>Add:<\/p>\n\n<pre><code>define('WCAC_ENCRYPTION_KEY', 'YOUR_BASE64_ENCODED_32_BYTE_KEY');\n<\/code><\/pre>\n\n<p>Generate a secure 32-byte key with PHP:<\/p>\n\n<pre><code>php -r \"echo base64_encode(random_bytes(32)), PHP_EOL;\"\n<\/code><\/pre>\n\n<p>Copy the generated value into <code>wp-config.php<\/code>:<\/p>\n\n<pre><code>define('WCAC_ENCRYPTION_KEY', 'your-generated-base64-key');\n<\/code><\/pre>\n\n<p>Place the constant before <code>\/* That's all, stop editing! Happy publishing. *\/<\/code> in <code>wp-config.php<\/code>.<\/p>\n\n<h3>Docker environments<\/h3>\n\n<p>If WordPress is running in Docker, the key can be generated inside the WordPress container:<\/p>\n\n<pre><code>docker compose exec wordpress php -r \"echo base64_encode(random_bytes(32)), PHP_EOL;\"\n<\/code><\/pre>\n\n<p>The key can also be provided through the container environment.<\/p>\n\n<p>For example, in <code>.env<\/code>:<\/p>\n\n<pre><code>WCAC_ENCRYPTION_KEY=your-generated-base64-key\n<\/code><\/pre>\n\n<p>Then expose it to the WordPress container and load it from <code>wp-config.php<\/code>:<\/p>\n\n<pre><code>if (getenv('WCAC_ENCRYPTION_KEY')) {\n    define('WCAC_ENCRYPTION_KEY', getenv('WCAC_ENCRYPTION_KEY'));\n}\n<\/code><\/pre>\n\n<p>Do not commit <code>.env<\/code> files containing the encryption key to source control.<\/p>\n\n<h3>Encryption key requirements<\/h3>\n\n<ul>\n<li>The key must be a valid Base64-encoded 32-byte value.<\/li>\n<li>Keep the encryption key secret.<\/li>\n<li>Do not commit the encryption key to Git.<\/li>\n<li>Do not place the key in plugin source code.<\/li>\n<li>Do not use the external API credential as the encryption key.<\/li>\n<li>Keep the same encryption key for the lifetime of the encrypted credentials.<\/li>\n<li>Changing the encryption key will prevent previously encrypted credentials from being decrypted.<\/li>\n<li>Back up the encryption key securely when backing up a production WordPress installation.<\/li>\n<\/ul>\n\n<p>After configuring the encryption key, enter the API credential in the API Connector settings and save the configuration.<\/p>\n\n\n\n<h3>Authentication<\/h3>\n\n<p>The connector supports configurable API authentication.<\/p>\n\n<h3>Bearer Token<\/h3>\n\n<p>Send the header <code>Authorization: Bearer YOUR_TOKEN<\/code>.<\/p>\n\n<h3>API Key<\/h3>\n\n<p>Send the header <code>X-API-Key: YOUR_API_KEY<\/code>.<\/p>\n\n<p>The API credential is encrypted before being stored in the WordPress database.<\/p>\n\n<p>Credentials are not rendered back into the settings form after being saved. The credential field remains empty and displays a saved-credential indicator when a credential is configured.<\/p>\n\n<p>When testing a connection, an administrator can enter a new credential and test it without first saving it.<\/p>\n\n<h3>Server-managed API credential<\/h3>\n\n<p>For high-security deployments, an API credential can also be provided through the <code>WCAC_API_KEY<\/code> constant in <code>wp-config.php<\/code>.<\/p>\n\n<p>Example:<\/p>\n\n<pre><code>define('WCAC_API_KEY', 'YOUR_API_CREDENTIAL');\n<\/code><\/pre>\n\n<p>When configured, this server-managed credential takes precedence over the credential stored by the plugin.<\/p>\n\n<p>Keep the value outside source control and never commit production credentials to Git.<\/p>\n\n<h3>Encryption key vs API credential<\/h3>\n\n<p>These are two different secrets:<\/p>\n\n<pre><code>WCAC_API_KEY\n    \u2502\n    \u2514\u2500\u2500 External API credential\n\nWCAC_ENCRYPTION_KEY\n    \u2502\n    \u2514\u2500\u2500 Local encryption key used to protect\n        credentials stored by the plugin\n<\/code><\/pre>\n\n<p>The encryption key does not authenticate requests to the external API.<\/p>\n\n<p><strong>Never place production API credentials or encryption keys in GitHub, screenshots, example configuration files, support requests, or issue reports.<\/strong><\/p>\n\n\n\n<h3>Order Processing<\/h3>\n\n<p>When a configured WooCommerce event occurs, the plugin creates an asynchronous integration job.<\/p>\n\n<pre><code>Order Event\n    \u2502\n    \u25bc\nCreate Integration Job\n    \u2502\n    \u25bc\nAction Scheduler\n    \u2502\n    \u25bc\nLoad WooCommerce Order\n    \u2502\n    \u25bc\nApply Field Mapping\n    \u2502\n    \u25bc\nGenerate JSON Payload\n    \u2502\n    \u25bc\nSend REST API Request\n    \u2502\n    \u251c\u2500\u2500 Success\n    \u2502      \u2193\n    \u2502   Log success\n    \u2502\n    \u2514\u2500\u2500 Failure\n           \u2193\n        Retry\n           \u2193\n        Log failure\n<\/code><\/pre>\n\n<p>Using asynchronous processing prevents the external API request from unnecessarily blocking the WooCommerce order lifecycle.<\/p>\n\n\n\n<h3>Retry Handling<\/h3>\n\n<p>Temporary API failures can occur because of:<\/p>\n\n<ul>\n<li>Network problems<\/li>\n<li>API timeouts<\/li>\n<li>Temporary server errors<\/li>\n<li>Rate limiting<\/li>\n<li>External service outages<\/li>\n<\/ul>\n\n<p>The connector can retry failed integration jobs according to its configured retry strategy.<\/p>\n\n<p>A typical flow is:<\/p>\n\n<pre><code>Attempt 1\n   \u2502\n   \u2514\u2500\u2500 Failed\n         \u2193\n       Retry\n         \u2193\nAttempt 2\n   \u2502\n   \u2514\u2500\u2500 Failed\n         \u2193\n       Retry\n         \u2193\nAttempt 3\n   \u2502\n   \u251c\u2500\u2500 Success\n   \u2502\n   \u2514\u2500\u2500 Failed \u2192 Mark as failed\n<\/code><\/pre>\n\n\n\n<h3>Field Mapping<\/h3>\n\n<p>The mapping system separates WooCommerce data from the external API's payload structure.<\/p>\n\n<p>For example, a WooCommerce order might contain:<\/p>\n\n<pre><code>Order ID\nBilling Email\nBilling First Name\nBilling Last Name\nOrder Total\nCurrency\nLine Items\n<\/code><\/pre>\n\n<p>The external API may expect:<\/p>\n\n<pre><code>{\n  \"externalOrderId\": 12345,\n  \"customer\": {\n    \"email\": \"customer@example.com\",\n    \"firstName\": \"John\",\n    \"lastName\": \"Doe\"\n  },\n  \"amount\": 199.99,\n  \"currency\": \"USD\",\n  \"items\": []\n}\n<\/code><\/pre>\n\n<p>The mapping configuration determines how the WooCommerce data is transformed into the destination structure.<\/p>\n\n<p>This means the plugin can support different API payload structures without requiring custom PHP code for every integration.<\/p>\n\n\n\n<h3>Testing<\/h3>\n\n<p>The project includes automated tests for core components.<\/p>\n\n<p>Run the test suite:<\/p>\n\n<pre><code>composer test\n<\/code><\/pre>\n\n<p>Before deploying a new version, test the plugin against a real WooCommerce installation with:<\/p>\n\n<ul>\n<li>HPOS enabled<\/li>\n<li>HPOS disabled\/legacy storage where applicable<\/li>\n<li>New orders<\/li>\n<li>Completed orders<\/li>\n<li>Successful API requests<\/li>\n<li>Authentication failures<\/li>\n<li>API validation errors<\/li>\n<li>Server errors<\/li>\n<li>Request timeouts<\/li>\n<li>Retry scenarios<\/li>\n<li>Encrypted credential storage and retrieval<\/li>\n<li>Connection testing with a newly entered credential<\/li>\n<li>Connection testing with a previously saved credential<\/li>\n<\/ul>\n\n\n\n<h3>Security<\/h3>\n\n<p>Security is an important part of the plugin architecture.<\/p>\n\n<p>The project follows WordPress security practices including:<\/p>\n\n<ul>\n<li>Capability checks for administrative actions<\/li>\n<li>Nonce verification<\/li>\n<li>Input sanitization<\/li>\n<li>Output escaping<\/li>\n<li>WordPress HTTP APIs<\/li>\n<li>Authenticated encryption for stored API credentials<\/li>\n<li>Dedicated encryption key configuration<\/li>\n<li>Secure handling of API credentials<\/li>\n<li>Avoiding direct database access for WooCommerce orders<\/li>\n<li>Avoiding credentials in logs<\/li>\n<li>Validation of API configuration<\/li>\n<li>TLS certificate verification for outbound HTTP requests<\/li>\n<\/ul>\n\n<p>API credentials stored by the plugin are encrypted before being persisted to the WordPress options table.<\/p>\n\n<p>The plugin uses PHP Sodium authenticated encryption for credential protection.<\/p>\n\n<p>The plugin does not require access to the external API's source code or server infrastructure.<\/p>\n\n\n\n<h3>Project Structure<\/h3>\n\n<pre><code>api-connector-for-woocommerce\/\n\u2502\n\u251c\u2500\u2500 src\/\n\u2502   \u251c\u2500\u2500 Admin\/\n\u2502   \u251c\u2500\u2500 Api\/\n\u2502   \u251c\u2500\u2500 Mapping\/\n\u2502   \u251c\u2500\u2500 Orders\/\n\u2502   \u251c\u2500\u2500 Jobs\/\n\u2502   \u251c\u2500\u2500 Logging\/\n\u2502   \u251c\u2500\u2500 Settings\/\n\u2502   \u2514\u2500\u2500 Install\/\n\u2502\n\u251c\u2500\u2500 assets\/ (admin CSS and JavaScript, icon, and directory screenshots)\n\u2502\n\u251c\u2500\u2500 tests\/\n\u2502\n\u251c\u2500\u2500 languages\/\n\u2502\n\u251c\u2500\u2500 composer.json\n\u251c\u2500\u2500 composer.lock\n\u251c\u2500\u2500 readme.txt\n\u251c\u2500\u2500 uninstall.php\n\u2514\u2500\u2500 storedispatcher-outbound-integration-for-woocommerce.php\n<\/code><\/pre>\n\n<p>The project uses a modular architecture to keep WordPress-specific functionality separate from API communication and mapping logic.<\/p>\n\n\n\n<h3>Current Scope<\/h3>\n\n<p>The current version focuses on the core WooCommerce \u2192 REST API integration workflow.<\/p>\n\n<h3>Currently supported<\/h3>\n\n<ul>\n<li>WooCommerce order events<\/li>\n<li>Configurable API connection<\/li>\n<li>API authentication<\/li>\n<li>Encrypted API credential storage<\/li>\n<li>Order field mapping<\/li>\n<li>Customer information mapping<\/li>\n<li>Line-item mapping<\/li>\n<li>Nested JSON structures<\/li>\n<li>Asynchronous processing<\/li>\n<li>Retry handling<\/li>\n<li>Integration logging<\/li>\n<li>Test connection<\/li>\n<li>Test payload generation<\/li>\n<li>HPOS compatibility<\/li>\n<\/ul>\n\n<h3>Not implemented in this release<\/h3>\n\n<p>The current release sends order events only. Customer names, email addresses, and line items are available as fields within an order payload; standalone customer and product event delivery are not implemented.<\/p>\n\n<p>Other possible future improvements include:<\/p>\n\n<ul>\n<li>Custom WooCommerce metadata mapping<\/li>\n<li>Additional authentication methods<\/li>\n<li>Advanced field transformations<\/li>\n<li>Conditional mappings<\/li>\n<li>Multiple API integrations<\/li>\n<li>Scheduled synchronization<\/li>\n<li>Bidirectional synchronization<\/li>\n<li>Response mapping<\/li>\n<li>Import\/export of integration configurations<\/li>\n<li>AI-assisted field mapping<\/li>\n<\/ul>\n\n\n\n<h3>Future AI Integration<\/h3>\n\n<p>AI is intentionally not required for the core integration process.<\/p>\n\n<p>The planned AI functionality will assist administrators during configuration rather than running inside the production order-processing pipeline.<\/p>\n\n<p>For example:<\/p>\n\n<pre><code>External API Schema\n        \u2502\n        \u25bc\nAI Mapping Assistant\n        \u2502\n        \u25bc\nSuggested WooCommerce Mappings\n        \u2502\n        \u25bc\nAdministrator Review\n        \u2502\n        \u25bc\nSaved Mapping\n        \u2502\n        \u25bc\nDeterministic Production Integration\n<\/code><\/pre>\n\n<p>This approach keeps production integrations predictable while using AI to reduce the time required to configure complex API mappings.<\/p>\n\n\n\n<h3>Roadmap<\/h3>\n\n<h3>V1<\/h3>\n\n<ul>\n<li>[x] WooCommerce integration<\/li>\n<li>[x] REST API client<\/li>\n<li>[x] API authentication<\/li>\n<li>[x] Encrypted API credential storage<\/li>\n<li>[x] Order events<\/li>\n<li>[x] Field mapping<\/li>\n<li>[x] Nested payloads<\/li>\n<li>[x] Line-item mapping<\/li>\n<li>[x] Action Scheduler processing<\/li>\n<li>[x] Retry handling<\/li>\n<li>[x] Integration logging<\/li>\n<li>[x] Test connection<\/li>\n<li>[x] Test payload<\/li>\n<\/ul>\n\n<h3>V1.x<\/h3>\n\n<ul>\n<li>[ ] Improved mapping UI<\/li>\n<li>[ ] Idempotency protection<\/li>\n<li>[ ] Additional API authentication methods<\/li>\n<li>[ ] Custom order metadata<\/li>\n<li>[ ] Improved integration monitoring<\/li>\n<li>[ ] Additional automated tests<\/li>\n<\/ul>\n\n<h3>V2+<\/h3>\n\n<ul>\n<li>[ ] Multiple integrations<\/li>\n<li>[ ] Advanced transformations<\/li>\n<li>[ ] Conditional mappings<\/li>\n<li>[ ] Scheduled synchronization<\/li>\n<li>[ ] Bidirectional synchronization<\/li>\n<li>[ ] Configuration import\/export<\/li>\n<li>[ ] AI-assisted mapping<\/li>\n<\/ul>\n\n\n\n<h3>Contributing<\/h3>\n\n<p>Contributions, bug reports, feature requests, and improvements are welcome.<\/p>\n\n<p>Before submitting a pull request:<\/p>\n\n<ol>\n<li>Follow the existing project structure.<\/li>\n<li>Add or update tests where appropriate.<\/li>\n<li>Run the test suite.<\/li>\n<li>Run static analysis\/linting where configured.<\/li>\n<li>Ensure WordPress and WooCommerce compatibility is maintained.<\/li>\n<li>Do not include API credentials or customer data.<\/li>\n<li>Do not include encryption keys or other deployment secrets.<\/li>\n<\/ol>\n\n\n\n<h3>Bug Reports<\/h3>\n\n<p>When reporting a problem, please include:<\/p>\n\n<ul>\n<li>WordPress version<\/li>\n<li>WooCommerce version<\/li>\n<li>PHP version<\/li>\n<li>Whether HPOS is enabled<\/li>\n<li>Plugin version<\/li>\n<li>Relevant error\/log information<\/li>\n<li>Steps to reproduce the issue<\/li>\n<\/ul>\n\n<p><strong>Never include API keys, encryption keys, passwords, customer information, or other sensitive data in an issue.<\/strong><\/p>\n\n\n\n<h3>License<\/h3>\n\n<p>This project is licensed under the GPL-2.0-or-later license.<\/p>\n\n<p>See <code>LICENSE<\/code> for details.<\/p>\n\n\n\n<h3>Disclaimer<\/h3>\n\n<p>This plugin is provided as an integration framework for connecting WooCommerce stores with external REST APIs.<\/p>\n\n<p>External API availability, authentication requirements, rate limits, payload requirements, and data processing are controlled by the destination service.<\/p>\n\n<p>Always test an integration in a staging environment before using it with production orders.<\/p>\n\n\n\n<h3>Project<\/h3>\n\n<p>If this project is useful to you, consider giving it a star on GitHub.<\/p>\n\n<p>Issues and feature requests are welcome.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20send%20customer%20or%20product%20events%3F\"><h3>Does this send customer or product events?<\/h3><\/dt>\n<dd><p>No. This release sends order-created and order-completed events. Customer details and products in an order can be included in its mapped payload, but separate customer and product synchronization are not implemented.<\/p><\/dd>\n<dt id=\"can%20this%20connect%20to%20any%20rest%20api%3F\"><h3>Can this connect to any REST API?<\/h3><\/dt>\n<dd><p>The plugin can send order data to REST APIs that accept JSON requests. Configure the API URL, authentication, order endpoint, and field mappings to match the destination API.<\/p><\/dd>\n<dt id=\"can%20i%20create%20nested%20objects%20and%20line-item%20arrays%3F\"><h3>Can I create nested objects and line-item arrays?<\/h3><\/dt>\n<dd><p>Yes. Use dot paths such as <code>customer.email<\/code> for nested objects and <code>items[].sku<\/code> for line-item arrays.<\/p><\/dd>\n<dt id=\"does%20the%20mapping%20preview%20use%20unsaved%20edits%3F\"><h3>Does the mapping preview use unsaved edits?<\/h3><\/dt>\n<dd><p>No. Preview and test send use the saved mapping. Save the mapping table before previewing if you want to test recent changes.<\/p><\/dd>\n<dt id=\"how%20are%20api%20credentials%20stored%3F\"><h3>How are API credentials stored?<\/h3><\/dt>\n<dd><p>Credentials are encrypted in the WordPress database using PHP Sodium. Configure <code>WCAC_ENCRYPTION_KEY<\/code> before saving credentials, and keep a secure backup of that key.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.1.1<\/h4>\n\n<ul>\n<li>Added configurable REST API connections and authentication.<\/li>\n<li>Added order events, field mapping, asynchronous delivery, retries, and integration logs.<\/li>\n<li>Added connection and payload testing tools.<\/li>\n<\/ul>","raw_excerpt":"Connect WooCommerce orders to external REST APIs with configurable authentication, field mapping, retries, and request logs.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/393637","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=393637"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/glowkazaf"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=393637"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=393637"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=393637"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=393637"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=393637"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=393637"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}