ReferenceTroubleshooting

Troubleshooting

Match an add-on integration symptom to its cause and fix.

Each entry names the symptom, why it happens and the fix. All codes: Errors.

Registration and errors

CodeCauseFix
paylexer_register_too_latepaylexer_register_platform() ran outside paylexer_initRegister inside add_action( 'paylexer_init', … ), as shown in Register platform.
paylexer_platform_name_requiredNo name for the platformPass the platform you integrate as name (e.g. "Acme Bookings"), not your plugin's name.
paylexer_duplicate_platformAnother plugin already registered that platform IDThe merchant sees a notice naming both plugins; only one can integrate a platform.
paylexer_not_connectedPayLexer isn't connected on this siteThe merchant connects the PayLexer plugin first (paylexer_settings_url()).
paylexer_feature_not_declaredThe call needs a feature missing from supportsAdd refunds or subscriptions when you register.
paylexer_not_foundThe order or subscription isn't one your platform createdEach platform can reach only its own orders.

Webhooks

Start with PayLexer → Webhook logs. The PayLexer plugin logs each event there after verifying it and before firing your hooks.

SymptomCauseFix
Hook never firesThe platform ID in the hook name differs from the registered one, or your plugin registered too lateUse paylexer_platform_{id}_{event} with the exact ID, and register inside paylexer_init. See Webhooks.
Order paid twice, or paid after a failureA retry or out-of-order eventBe idempotent, lock per order, and never move a paid order back to unpaid. See Writing safe handlers.
Verified, but you don't fulfilMatching on your own referencedata.orderReference is PayLexer's ORD-… reference. Save it on your order when you create the checkout.
Event answered 503No active plugin registered that platformActivate your plugin; PayLexer retries a limited number of times.
Refund recorded twiceYou handled your own refund againSkip it when $event->is_own_refund( 'your-id' ) (API 1.1 and later).

Checkout

SymptomCauseFix
No gateways returnedNone enabled for this site or currencyCheck PayLexer → Gateways, or drop the currency filter.
paylexer_billing_address_requiredThe gateway needs an addressPass customer.address.
Subscription modal ends in onPendingSubscriptions can't be confirmed in the browserActivate it from the subscription_activated webhook.
paylexer_unknown_gatewayGateway not enabled for this siteUse a code from paylexer_get_gateways().
paylexer_currency_not_supportedThe gateway can't take this payment in that currencyPick a gateway whose currencies includes it, or filter with paylexer_get_gateways( array( 'currency' => … ) ).
Checkout opens as a redirect, not a modalPayLexer decides per gateway, from its own configurationNothing to set. openCheckout() follows checkout.checkout (modal or redirect). See Open checkout.