Skip to content

Troubleshooting

What to do when a price is not the price you expected. Nearly every question here is answered by one screen: Catalog → B2B Pricing → Price check, which asks the same code the storefront asks and shows its working. Start there before changing anything.

B2B Pricing will not open at all

A blank page, or a bounce back to the dashboard, is an install problem rather than a B2B Pricing one. See troubleshooting an install, and check that your user group has both Access and Modify on the permission entries in requirements and install.

Each menu entry needs its own permission, so a group with permission for none of them sees no Catalog → B2B Pricing entry at all rather than an entry that refuses.

The customer is still paying the public price

Ask Price check first: it will name what happened.

  1. Is the list enabled? A draft prices nothing for anybody. Price check says the list is a draft beside it.
  2. Is anybody on it? A list with no assignment prices nothing, and the Assignments tab says so in as many words.
  3. Is the assignment live today? Both dates count, and Price check says not live today for a window that has closed or not opened.
  4. Is the assignment for the right store? An assignment belongs to one store. A list assigned in the default store prices nothing in your second shop.
  5. Is there a row for this product at this quantity? A list prices what it prices; Price check says no row for this product, and a rung above the quantity asked about says its quantity is above the one asked about.

The wrong list is winning

Price check names the winner and the reason each of the others lost.

  • beaten by a list assigned to this customer by name: a per-customer list beats a group list whatever the prices are. This is the intended rule. Move or delete that assignment if it is not what you meant.
  • lower priority: two assignments of the same kind reach this buyer, and the lower priority number won. Change the number on the assignment.
  • equally specific and dearer: the two had an equal claim, so the buyer paid the lower price.

A price changed and nobody edited a price list

Two things move a price without a list being touched:

  • OpenCart's own price, special or discount changed, on a product no list prices. B2B Pricing has no opinion there and core prices it exactly as it always did.
  • A Bulk set was run with a percentage. The percentage is applied once, against the OpenCart price at that moment, and the resulting figures are what is stored. Running it again after a catalogue import rewrites them. See limits.

The cart charges something different from the product page

On a product a price list prices, it cannot: one piece of code answers both. If you are seeing it, check in this order:

  1. Is the line carrying a price somebody set by hand? A cart or order line that already has an explicit price (from the order editor, a subscription or another extension) is left alone, deliberately.
  2. Is it a subscription line? Those are priced by the plan, not by a list.
  3. Is the product on no list at all? Then you are looking at OpenCart's own long-standing disagreement between a special and a quantity break. Putting the product in a list removes it. See limits.

The checkout refuses a cart and the customer cannot see why

A case quantity is checked against the whole cart for that product, the way OpenCart checks its own minimum: six of one colour and six of another is twelve. The warning under a line is rendered when the page is drawn, so removing another line can leave it stale until the page loads again. The check itself is worked out afresh on every request and does not depend on what the page still shows. Reload the cart.

A price list line is missing from the product page

The line naming the winning list needs OpenCart 4.1.0.3 or newer. On 4.1.0.1 and 4.1.0.2 the product page has no data-driven slot for it, so it is silently absent while the price, the ladder and the cart are all correct. Price check answers the same question in the admin.

It is also never printed to a shopper who has not signed in.

The API answers 404 to everything

The JSON API ships switched off, and off means absent: every route answers 404 api_disabled. Turn it on in the API section of B2B Pricing's own settings screen, under Extensions → Extensions → Modules. It is one switch for the whole installation, and it is independent of the module's own status.

If it is on and you are getting 401 unauthorized, the credential is one of OpenCart's own API users under System → Users → API, not an admin login. That user has to be enabled and has to carry the calling server's IP address on its list: a user with an empty list is refused. The settings screen's API section warns you when no user qualifies.

426 tls_required means the call came over plain HTTP. The API answers only over HTTPS.

Turning on detailed logging for a support exchange

The Diagnostics section of the settings screen has a Detailed logging switch. It opens a two-day window and closes itself, and while it is open B2B Pricing records what it did in far more detail. The file is kyvero.log, reachable from System → Maintenance → Error Logs, which lists it as a tab of its own with its own Download button.

Send the relevant lines rather than the file: it is shared with every Kyvero extension on the store. Logging says what goes into it and where it sits.