# Résolution des problèmes

> Les erreurs les plus fréquentes lors de l’intégration du client – paiement intégré qui bascule vers une fenêtre pop-up, fenêtres bloquées, conteneurs manquants et avertissements dans la console.

Le client consigne dans la console du navigateur tous les éléments qu’il signale, préfixés par `[Entase API]`. Commencez par ouvrir la console.

## Le paiement s’ouvre dans une fenêtre pop-up au lieu d’un panneau

Les causes habituelles, dans l’ordre où il convient de les vérifier :

1. **Le domaine n’est pas une origine approuvée.** Ajoutez-le dans Paramètres → Intégrations, en respectant le préfixe `www.` effectivement utilisé par votre site – voir [Intégrations et personnalisation du paiement](/organizers/settings/integrations-and-checkout-customization.md).
2. **La page n’est pas servie via HTTPS.** Le paiement intégré n’est jamais utilisé sur une page non sécurisée.
3. **Aucune clé publiable.** Sans `pk`, le client ne peut pas vérifier si le paiement intégré est autorisé ; il conserve donc le mode pop-up.
4. **`book()` s’est exécuté trop tôt.** La vérification des autorisations est asynchrone et le mode reste pop-up jusqu’à ce qu’elle réponde. Un paiement ouvert automatiquement au chargement de la page peut la devancer – voir [Modes de paiement](/developers/js-client/checkout-modes.md).
5. **`connect-src` est bloqué par votre politique de sécurité du contenu**, donc la vérification ne se termine jamais. La console affichera la requête bloquée.

`entase.getCheckoutMode()` indique le mode résolu et constitue le moyen le plus rapide de distinguer les problèmes de configuration des problèmes de timing.

## « Mode de paiement par panneau activé pour localhost »

C’est attendu pendant le développement. Le client suppose le mode panneau sur `localhost` et `127.0.0.1` afin que vous puissiez développer avec la mise en page intégrée, et affiche un avertissement car cette hypothèse ne dit rien de l’environnement de production. Ajoutez votre véritable domaine aux origines approuvées avant la mise en production.

## La fenêtre pop-up est bloquée

Les navigateurs n’autorisent l’ouverture d’une fenêtre que lors d’une action de l’utilisateur. Appelez `book()` de manière synchrone dans le gestionnaire de clic, et non après un `await`, un `fetch` ou un `setTimeout`. Voir [Modes de paiement](/developers/js-client/checkout-modes.md).

## Le panneau s’ouvre vide

L’iframe de paiement a été bloquée. Autorisez `https://www.entase.com` dans la directive `frame-src` de votre politique de sécurité du contenu – voir [Installation du client](/developers/js-client/installing-the-client.md).

## « Entase n’est pas défini »

Le script n’avait pas fini de se charger lorsque votre code s’est exécuté. Cela se produit lorsque `client.js` est chargé avec `async` ou `defer`, ou est placé après le script qui l’utilise. Attendez l’événement `entase:ready` – voir [Installation du client](/developers/js-client/installing-the-client.md).

## « Tentative de réservation d’un événement après la destruction du client »

`destroy()` a été appelé sur l’instance et celle-ci ne peut plus être utilisée. Dans une application monopage, cela signifie généralement qu’un composant a détruit son client alors qu’une référence partagée est restée en place. Créez une nouvelle instance pour la nouvelle vue.

## « Échec de l’initialisation de l’iframe Entase. Conteneur introuvable. »

Widget intégré uniquement. Le code `obj` de la configuration ne correspond à aucun élément de la page. L’id du conteneur doit être `entase_` suivi du même code, et il doit exister dans le DOM avant l’initialisation du widget – vérifiez s’il y a une faute de frappe ou si un conteneur est rendu plus tard par vos propres scripts.

## Seul le dernier écouteur d’événement s’exécute

`on()` conserve un rappel par nom d’événement, et l’enregistrement d’un second remplace le premier. Enregistrez-en un seul et répartissez les traitements depuis ce rappel – voir [Événements](/developers/js-client/events.md).

## La fenêtre pop-up s’ouvre sur le mauvais écran

Le point central est calculé lors de la création de l’instance et n’est pas mis à jour lorsque le visiteur déplace la fenêtre du navigateur. Recalculez-le avant la réservation avec `setTopWindowCenter()` – voir [Référence des méthodes](/developers/js-client/methods.md).

## Les paramètres de suivi sont absents des commandes

Le client autonome ne lit pas l’URL de votre page. Transmettez vous-même les paramètres à `tprm` – voir [Suivi et consentement](/developers/js-client/tracking-and-consent.md). Notez que `setTracking()` remplace l’objet entier au lieu de le fusionner, de sorte qu’un appel ultérieur peut supprimer silencieusement des paramètres précédents.
