E-commerce (WooCommerce and Magento)
Sync customers and orders from your WooCommerce or Magento stores to the CRM using your own store (BYO model).
In addition to Shopify, the CRM syncs WooCommerce and Magento stores (BYO model: you bring your own store). Each customer becomes a Contact and each order becomes a Sales order. There is no cost, margin or intermediation on our side: the data comes straight from your store. The integration starts inert: nothing happens until you fill in the fields and activate. The secrets are stored encrypted in the CRM and are never displayed back.
Prerequisites
- WooCommerce: a WordPress/WooCommerce store with administrator access (to create webhooks in WooCommerce → Settings → Advanced → Webhooks).
- Magento (Adobe Commerce): access to install/configure a module, integration or observer that POSTs JSON for each customer/order (Magento does not have standardized native webhooks).
- In Sellio, administrator access to save the credentials and activate the integration in Settings → Integrations.
WooCommerce
WooCommerce sends native webhooks. You create the webhooks in your store pointing to the CRM URL and define a "Secret"; WooCommerce signs each call with that secret (HMAC-SHA256, header X-WC-Webhook-Signature) and the CRM verifies the signature before syncing.
- In the CRM, open Settings → Integrations and find the "E-commerce (WooCommerce)" card.
- Fill in the store URL (optional, reference only) and a Webhook secret (a string you choose) and click "Save credentials".
- Copy the "Webhook URL (WooCommerce)" that appears.
- In your store, go to WooCommerce → Settings → Advanced → Webhooks and create a webhook for EACH topic: Customer created, Customer updated, Order created, Order updated. In each one, paste the CRM URL as the Delivery URL and use the SAME Secret you saved in the CRM.
- Return to the CRM and click "Activate".
Magento (Adobe Commerce)
Magento does not have standardized native webhooks. You configure a module/integration (or an observer) that makes a JSON POST to the CRM URL for each customer or order. The POST is authenticated by a secret, in two possible ways (use whichever your module supports): an HMAC-SHA256 signature of the body in base64 in the X-Magento-Signature header, or the secret itself in plain text in the X-Magento-Secret header.
- In the CRM, open Settings → Integrations and find the "E-commerce (Magento)" card.
- Fill in the store URL (optional) and an Authentication secret (a string you choose) and click "Save credentials".
- Copy the "Webhook URL (Magento)" that appears.
- Configure your Magento module/integration to POST (JSON) to that URL for each customer and order, sending the secret in the X-Magento-Signature header (HMAC signature) or X-Magento-Secret (plain value).
- Return to the CRM and click "Activate".
JSON format expected by Magento. For customers: { "type": "customer", "id", "email", "firstname", "lastname", "telephone", "street", "city", "region", "country_id" }. For orders: { "type": "order", "increment_id" (or "entity_id"), "grand_total", "order_currency_code", "status", "customer_email", "customer_id", "customer_firstname", "customer_lastname" }. The "type" field (customer or order) decides the mapping; missing fields become empty.
What happens on each event
- Customer (customer.created/updated in Woo; type "customer" in Magento): the customer is created or updated as a Contact, matching by email. The CRM stores the store customer id (woo_customer_id / magento_customer_id) to avoid duplicating on redeliveries.
- Order (order.created/updated in Woo; type "order" in Magento): the order is created or updated as a Sales order (number, amount, currency and status), linked to the corresponding Contact when it exists. In Woo, "completed" becomes "invoiced" and "cancelled/refunded/failed" becomes "canceled"; in Magento, "complete/closed/invoiced" becomes "invoiced" and "canceled/holded" becomes "canceled"; the rest become "confirmed".
Treat the webhook URLs and the secrets as secret. Calls with an invalid signature/secret are refused. If you try to activate without filling in the secret, the integration stays inert, and nothing is synced until everything is in place.
How to test
- WooCommerce: in WooCommerce → Settings → Advanced → Webhooks, edit a webhook and check the "Webhook logs" after creating a test customer/order; in the CRM, check Contacts/Sales orders.
- Magento: trigger your observer/integration for a test customer and order (JSON POST with the "type" field) and check the records in the CRM.
- Resend the same event and confirm the CRM updates (does not duplicate), since the key is the external id.
Troubleshooting
- WooCommerce: invalid signature: the webhook "Secret" in the store must be EQUAL to the Webhook secret saved in the CRM (HMAC-SHA256, header X-WC-Webhook-Signature). Re-enter the same value on both sides.
- Magento: call refused: send the secret correctly, either the HMAC-SHA256 of the body in base64 in the X-Magento-Signature header OR the plain secret in the X-Magento-Secret header (use whichever your module supports).
- Does not sync: confirm the webhooks/POSTs cover customer AND order (created/updated) and point to the correct "Webhook URL"; confirm the integration is activated.
- Magento: empty fields in the CRM: validate the expected JSON (customer: id/email/firstname/lastname...; order: increment_id/grand_total/order_currency_code/status/customer_email...). The "type" field (customer/order) decides the mapping.
- 404 on the URL: integration deactivated or token changed. Reactivate and re-copy the URL.