Troubleshooting¶
Common symptoms and their fixes. When in doubt, start with
php bin/console marketplace:ping — it tells you which backend is bound and
whether it can reach its data.
Install & schema¶
plugin:install fails writing the OAuth keypair
The plugin generates var/marketplace/oauth.id_rsa{,.pub} on install and
needs write access to var/marketplace/. Fix permissions for the web/CLI
user, then php bin/console plugin:install --activate FlyokaiMarketplace
again (idempotent).
Tables missing / schema looks out of date
Re-run the idempotent apply: php bin/console marketplace:local:schema:apply.
The 23 flyokai_* tables are reconciled from declarative DTOs every install /
update; this re-applies them without data loss.
Offers & buy-box¶
A seller's offer doesn't show on the storefront
Almost always pending approval. Check the Offers admin
for offers in pending_approval and approve them — only active offers reach
the buy-box. To let sellers publish directly, enable autoApproveOffers.
Also confirm marketplaceEnabled is on for that sales channel.
Offer exists on the parent product but not the variant
Offers are per-variant — the parent carries none. The buy-box resolves per
variant. Backfill with
php bin/console flyokai:marketplace:backfill-variant-offers.
Native product price isn't being overridden
Check priceDisplayMode. native never overrides; hybrid keeps the native
price and only adds a synthetic offer in the widget. Use marketplace for
buy-box pricing. See Cart & checkout.
Seller portal¶
Portal calls fail with CORS errors
The browser origin isn't allowed. Set Settings → Plugins →
FlyokaiMarketplace → Seller portal → Seller portal CORS origin
(sellerPortalOrigin) to the SPA's exact origin (default
http://localhost:5173).
Portal login / JWT rejected
- Verify the SPA's
VITE_OAUTH_CLIENT_ID/SECRETmatch a client frommarketplace:oauth:client:create. - If you ran
marketplace:oauth:keypair:generate, all existing JWTs are now invalid — sellers must re-authenticate. - The seller's
flyokai_usermust exist and be active.
401/403 on a …/me/… endpoint
/flyok-portal/* runs under the portal route scope; the JWT must validate and
resolve to a seller. A seller can only ever access their own data — a
cross-seller id will 403.
Statements & payouts¶
Changing commission didn't change an existing statement
By design. Commission and fees are snapshotted onto PO lines at order placement; statements read those snapshots. New config only affects future orders. See Finance.
includeShippingInPayout change not reflected
It applies at generate / recompute time. Recompute an open statement to
pick it up; closed / paid statements are frozen.
Remote¶
marketplace:ping still shows LocalMarketplaceBackend after installing Remote
The rebind happens in Remote's compiler pass at container build. Run
php bin/console plugin:install --activate FlyokaiMarketplaceRemote, then
clear the cache (bin/console cache:clear) so the container rebuilds.
Portal shows errors when the cluster is down
Intentional — there's no silent fallback. Under dataLocation=cluster a
fallback would read the wrong DB. Bring the cluster back; sendRequest()
recovers on its own.
Cluster 'restarted' but marketplace:ping fails
Stale workers holding the sockets. ss -lntp | grep -E '1339|1439' — kill
leftover processes (systemd may report "active" while old workers own the
port), then rerun.
Data migration¶
Migration aborts at schema_check
The data-plane tables differ between source and target (columns / types /
nullability). Apply the schema on both ends
(marketplace:local:schema:apply Shopware-side; cluster setup cluster-side),
then rerun — it resumes from the failing step.
Migration stalls at restart_cluster
Step 7 polls the channel port for 30s. Your clusterRestartCommand may need a
passwordless sudoers rule, or it isn't actually restarting the cluster. Fix
the command, then rerun the same migrate command (state is persisted in
var/marketplace/migration.state).
Writes are blocked but no migration is running
A migration left the maintenance flag set (e.g. it was interrupted before
step 10). Don't toggle the flag by hand — rerun the migrate command so it
finishes its steps and clears the gate cleanly.
Mail¶
Mail isn't delivered
The marketplace only sets the From identity (mailFromAddress /
mailFromName); the transport is Shopware's. Check Settings → System →
Mailer, then php bin/console marketplace:mail:smoke to test end-to-end.
Still stuck?¶
The authoritative text is in the plugin README.md files in the
flyokai/flyokai monorepo. When code and
docs disagree, the code wins — and marketplace:ping is your first instrument.