Appearance
Troubleshooting
For merchants
Logs
var/log/kommandhub_orderexport_<env>.log (rotating, 7 files). Errors are always written; enable Enable debug logging under Extensions → My extensions → Order Export → Configure for more, per sales channel. Each export attempt is also recorded on the order's Order export card, with HTTP status and payload hash.
Orders are not being exported automatically
Check:
- The flow is active and contains Export order with the right target.
- The flow's trigger actually fires for these orders (e.g. Payment paid only fires for paid orders).
- The target is active and has a published mapping.
- For asynchronous targets: a queue worker is running —
bin/console messenger:statsshows waiting messages. See Installation → Background processing. - The log for
Order export flow action failed.
Export failed
Open the order's Order export card and the log. By cause:
| Symptom | Cause | Fix |
|---|---|---|
| Render / field errors | The mapping cannot render this order (a failing expression) | Test mapping against this order, fix, Publish, then Retry. |
401 / 403 from the target | Wrong credential | Update the credential's secret; for OAuth2 check token URL, client ID and scope. |
404 from the target | Wrong endpoint URL | Fix the target. |
4xx other | The target rejected the payload | Compare the rendered payload with what the target expects. |
5xx, timeout, connection error | Target down or slow | Asynchronous targets retry automatically. Increase Timeout (ms) if the target is slow. |
| Failed after awaiting acknowledgement | No valid callback within the timeout | See below. |
"Order already exported with same data" — but I want to send it again
The rendered document has not changed since the last successful export, so nothing was sent. Use Re-export to force a new revision.
Export stays "awaiting acknowledgement"
The target uses asynchronous acknowledgement and has not called back yet.
- The receiving system must call
POST /kmh-order-export/acknowledge— see Acknowledgement callback. - Its callbacks return
401→ theX-Kmh-SignatureorpayloadHashis wrong, or the target's credential has no secret. - Its callbacks return
404→ the correlation ID does not match; check the Correlation ID path. - Scheduled tasks must run, or timed-out exports are never marked failed.
bin/console scheduled-task:listshowskmh_order_export.ack_timeoutand its next run.
Test connection says unreachable
The shop server cannot reach the URL: DNS, firewall, TLS certificate (try with Verify TLS certificate off on a test system only) or a wrong URL. Any HTTP answer — even 404 or 405 — counts as reachable.
"Unable to decrypt credential (wrong or rotated key)"
ORDER_EXPORT_ENCRYPTION_KEY (or APP_SECRET if the dedicated key is not set) differs from the one used when the credential was saved — for example on a second server or after a secret rotation. Restore the old key, or re-enter the secret of every credential.
A target receives orders from the wrong sales channel
The target's Sales channels field is not enforced in 0.9.0-beta.1. Add a sales-channel condition to the flow instead — see Exporting orders.
Asynchronous exports end up in the failed queue
Permanent problems (mapping cannot render, order deleted, invalid credentials) go straight to Shopware's failed transport; temporary ones do so after all retries.
bash
bin/console messenger:failed:show
bin/console messenger:failed:retry <id>Fix the cause first. See Shopware: Message queue.
Exports to one target all fail instantly
After 5 consecutive failures the circuit breaker pauses calls to that target for 60 seconds. Exports in that window fail without a network call and are retried later (asynchronous targets). Fix the target; the circuit closes by itself.
Known issues
In version 0.9.0-beta.1:
| Issue | Impact | Workaround |
|---|---|---|
| A target's Sales channels field is saved but not enforced. | Flows export orders from every sales channel to the chosen target. | Add a sales-channel condition to the flow. |
tax_rate() returns 0 when given a list of calculated taxes. | Wrong VAT rate in payloads. | tax_rate(item.price.calculatedTaxes[0].taxRate). |
| The payload hash for asynchronous acknowledgements is not sent; the receiver must recompute it. | Integration effort. | Follow the recipe. |
Custom request headers (headers on the target) can only be set through the API. | — | Admin API, or OrderExportRequestEvent. |
| Uninstalling does not remove tables or data, even without keep plugin data. | Data stays in the database. | Drop kmh_order_export* tables manually. |
| The repository changelog mentions "African currency and language support". | No such feature exists. | — |
Still stuck? Contact support with versions and log lines.