Fjord for Craft CMS

Troubleshooting

Start here

php craft fjord/flows/check

It catches most of what follows before a customer does.

The upsell page is skipped

Fjord walks a visitor past a post-purchase step it cannot serve. In order of likelihood:

  • No reusable payment source. The commonest cause by far. The customer must have ticked save my card, and the gateway must support payment sources and purchases. fjord/flows/check reports when no enabled gateway can do it at all.
  • The order is not paid. With Require a Paid Order on, an authorised-but-not-captured order does not qualify.
  • The offer window has closed. 60 minutes by default, from the moment the order completed.
  • The offer is already resolved for that order — accepted, or declined with replay off.
  • The offer's condition does not match, or its product has been deleted. A condition that cannot be evaluated hides the offer on purpose.
  • You are on Lite. Upsell and downsell steps are Pro, and a Lite install will not serve them.

A step 404s

php craft fjord/flows/routes

That prints exactly what Fjord contributes to the site's URL rules. If the step is missing from the list it is disabled, or its flow is; if it is listed at a different path, the slug or the flow's base URI changed. Routes are cached per site and cleared on every write, so a stale route means something wrote to the tables outside Fjord's services.

Also check the flow's Site — a flow scoped to one site is not served on the others.

"Which does not exist"

Fjord names the template it tried to render rather than falling back to its own. Either create it, or point the step's Template field at the one you have. A bare name resolves under the Template Root; a name with a slash is used as-is.

The bump discount disappeared

The discount comes from an adjuster reading options.fjordOffer on the line item. If the line was recreated without its options — by a custom add-to-cart, or an edit in the control panel — the stamp is gone and so is the discount. Untick and re-tick the bump.

If the discount is there but the tax looks wrong, check that no other plugin has re-registered the adjuster list in a way that puts Fjord's adjuster after tax.

The customer was taxed oddly on a bump

Fjord splices its adjuster in ahead of Commerce's tax adjuster. Another plugin appending to EVENT_REGISTER_ORDER_ADJUSTERS after Fjord's init() can land between them. Compare the order of craft\commerce\services\OrderAdjustments::getAdjusters().

The cart has two of everything

Stocking is once per session per step, so this is usually a second checkout step selling the same product with Cart Mode set to Add, or a template calling commerce/cart/update-cart with the product as well. Set the step to Replace the cart if it should be the only thing selling.

The auto-coupon is not applied

Commerce validates a coupon against the discount's own rules. A code that does not apply to the cart is put back rather than left on the order as a broken promise, and no error is shown — check the discount's conditions and dates. A coupon the customer typed themselves is never overwritten.

Reports are empty

Track Events may be off. Otherwise, check the window — the report defaults to 30 days — and remember that a step's conversion is recorded when the next step is seen, so a funnel whose last step is the only one being visited will show views and no conversions.

Webhooks are not arriving

They are queued, so first check the queue is running. Then that the plugin is on Pro — a Lite install keeps webhook rows and sends nothing. A delivery that fails is retried by the queue; the failure message names the endpoint.

A charge failed

Fjord → Reports lists recent offers with the gateway's own message. A gateway that has started asking for an interactive step — 3-D Secure on a stored card, for instance — cannot complete a one-click charge, and Fjord records the failure rather than parking the customer on a page that will not work.