> ## Documentation Index
> Fetch the complete documentation index at: https://developers.ligdicash.com/llms.txt
> Use this file to discover all available pages before exploring further.

# FAQ

> Questions fréquentes sur l'intégration LigdiCash — technique, compte, business.

Cette page regroupe les questions les plus fréquentes posées par les développeurs et les équipes business qui intègrent LigdiCash. Pour aller plus loin, chaque réponse renvoie vers la documentation détaillée.

## Compte et accès

<AccordionGroup>
  <Accordion title="Comment créer un compte marchand LigdiCash ?">
    Téléchargez l'application mobile LigdiCash (App Store / Play Store) et créez votre compte depuis l'app. Vous devrez ensuite fournir les documents requis dans le cadre du KYC et signer un contrat de partenariat avec votre Partner Manager.

    Voir [Protocole d'intégration](/essentials/protocole-integration) pour le détail des étapes.
  </Accordion>

  <Accordion title="Comment obtenir mes clés API ?">
    Vous n'avez pas à créer vous-même votre projet API. Après la signature du contrat, c'est l'**équipe technique LigdiCash** qui crée et active votre projet. Vos clés `Apikey` et `API_TOKEN` sont ensuite disponibles dans le Dashboard.

    Voir [Projet API](/concepts/projet-api) et [Authentification](/concepts/authentification).
  </Accordion>

  <Accordion title="Peut-on avoir plusieurs projets API sur un même compte ?">
    Oui, mais chaque projet API fait l'objet d'un **contrat distinct**. Si vous avez plusieurs applications ou pays à couvrir, discutez-en avec votre Partner Manager avant de démarrer une nouvelle intégration.
  </Accordion>

  <Accordion title="Existe-t-il un environnement sandbox pour tester sans payer ?">
    LigdiCash ne propose pas d'environnement sandbox distinct à ce jour. Les tests se font en production avec de vraies transactions. Renseignez-vous auprès de votre Partner Manager pour connaître les modalités de test disponibles.

    Contact : [developper@ligdicash.com](mailto:developper@ligdicash.com)
  </Accordion>
</AccordionGroup>

## Intégration technique

<AccordionGroup>
  <Accordion title="Quelle est la différence entre payin avec redirection et payin sans redirection ?">
    * **Avec redirection** : le client est envoyé vers une page de paiement hébergée par LigdiCash. Intégration simple, UI gérée par LigdiCash, mais moins de contrôle.
    * **Sans redirection** : le marchand gère entièrement l'interface et soumet le paiement via API. Plus de contrôle sur l'UX, mais intégration plus complexe et spécifique à chaque opérateur.

    Voir [Vue d'ensemble de l'API de paiement](/api-paiement/vue-ensemble) pour le tableau de décision.
  </Accordion>

  <Accordion title="Puis-je afficher la page de paiement dans une iframe ?">
    Non. LigdiCash bloque l'affichage de sa page dans une iframe. Vous devez ouvrir le lien dans le même onglet, un nouvel onglet, un popup, ou une WebView native (applications mobiles).

    Voir [Pièges courants du payin redirect](/api-paiement/payin-redirect/pieges-courants).
  </Accordion>

  <Accordion title="Pourquoi le champ customer doit-il rester vide dans le payin redirect ?">
    Si vous renseignez un numéro de téléphone dans `customer`, LigdiCash filtre la page de paiement pour n'afficher que les opérateurs correspondant à ce numéro, masquant les autres options. Laissez `customer: ""` pour que votre client puisse choisir librement son opérateur.

    Voir [Pièges courants du payin redirect](/api-paiement/payin-redirect/pieges-courants).
  </Accordion>

  <Accordion title="Mon popup de paiement est bloqué par le navigateur. Comment contourner cela ?">
    Les navigateurs bloquent les popups ouverts en dehors d'un événement utilisateur direct. Le pattern recommandé est d'ouvrir `window.open('about:blank')` au moment du clic utilisateur (avant le `await fetch`), puis de naviguer vers l'URL de paiement une fois la réponse reçue.

    Voir [Rediriger le client](/api-paiement/payin-redirect/rediriger-client).
  </Accordion>

  <Accordion title="Comment identifier ma transaction dans le callback si le token change ?">
    Le `token` présent dans le callback est différent du token retourné à la création. Ne vous y fiez pas pour retrouver votre commande. La méthode fiable est d'injecter votre propre identifiant de commande dans `custom_data` à la création, puis de le retrouver via `keyof_customdata === "transaction_id"` dans le callback.

    Voir [Le pattern transaction\_id](/concepts/transaction-id-pattern) et [Parser custom\_data](/api-paiement/callback/parser-custom-data).
  </Accordion>

  <Accordion title="Pourquoi mon callback est-il appelé deux fois pour une même transaction ?">
    C'est le comportement normal de LigdiCash. Pour chaque événement, deux requêtes POST sont envoyées à votre URL callback : une en `application/x-www-form-urlencoded` et une en `application/json`. Le contenu est identique. Implémentez une logique de déduplication (vérifier si la transaction est déjà traitée en base avant d'agir).

    Voir [Idempotence du callback](/api-paiement/callback/idempotence).
  </Accordion>

  <Accordion title="Comment sécuriser mon endpoint de callback ?">
    Ne faites jamais confiance au payload reçu sans vérification. N'importe qui connaissant l'URL de votre callback peut envoyer un faux payload. Après réception, re-vérifiez toujours le statut en appelant l'endpoint `confirm` avec le token que vous avez stocké lors de la création de la facture.

    Voir [Sécurisation du callback](/api-paiement/callback/securisation).
  </Accordion>

  <Accordion title="L'endpoint withdrawal/confirm est-il GET ou POST ?">
    L'endpoint `GET /pay/v01/withdrawal/confirm/` s'appelle en **GET** avec le token en query string. Il y a une incohérence dans la documentation actuelle.

    Voir [Vérifier le statut d'un payout](/api-paiement/payout/verifier-statut).
  </Accordion>

  <Accordion title="Quelle est la différence entre payout vers wallet et payout mobile money direct ?">
    * **`/withdrawal/create`** : envoie vers le wallet LigdiCash du destinataire. L'argent peut rester dans le wallet (`top_up_wallet: 1`) ou être automatiquement viré vers son mobile money lié (`top_up_wallet: 0`).
    * **`/straight/payout`** : envoie directement vers le numéro mobile money, sans wallet intermédiaire. Plus lent, mais ne nécessite pas que le destinataire ait un compte LigdiCash.

    Voir [Payout — Introduction](/api-paiement/payout/introduction).
  </Accordion>

  <Accordion title="Comment gérer les différents modes de validation selon les opérateurs ?">
    Il existe quatre modes selon l'opérateur :

    * **OTP USSD** — le client génère un OTP en composant un code USSD avant que vous ne soumettiez. Une seule requête API.
    * **USSD Push** — vous soumettez avec `otp: ""`, l'opérateur envoie un écran USSD push au client qui valide avec son PIN. Une seule requête API.
    * **USSD guidé** — vous soumettez avec `otp: ""`, l'opérateur envoie un SMS avec les instructions et un code USSD à composer. Une seule requête API.
    * **OTP SMS** — vous soumettez d'abord avec `otp: ""`, l'opérateur envoie un OTP par SMS, vous re-soumettez avec l'OTP saisi. Deux requêtes API.

    Voir [Modes de validation](/api-paiement/payin-sans-redirect/modes-validation) pour le détail des flux et des UX recommandées.
  </Accordion>
</AccordionGroup>

## Sécurité

<AccordionGroup>
  <Accordion title="Comment protéger mes clés API ?">
    * Ne jamais exposer `Apikey` et `Auth Token` côté client (navigateur, application mobile).
    * Toujours faire les appels LigdiCash depuis votre backend.
    * Utiliser des variables d'environnement, jamais des constantes dans le code source.
    * Régénérer les clés immédiatement en cas de compromission depuis le Dashboard.

    Voir [Architecture recommandée](/guides/architecture-recommandee).
  </Accordion>

  <Accordion title="Que faire si mes clés API sont compromises ?">
    Connectez-vous au Dashboard LigdiCash et régénérez vos clés immédiatement. Mettez à jour vos variables d'environnement en production. Auditez vos logs pour détecter des transactions non autorisées. Contactez [developper@ligdicash.com](mailto:developper@ligdicash.com) si vous suspectez une fraude.
  </Accordion>

  <Accordion title="Comment éviter les doublons de transaction ?">
    Deux mécanismes combinés :

    1. **Déduplication du callback** : avant de traiter un callback, vérifiez en base si le `transaction_id` a déjà été traité.
    2. **Re-vérification systématique** : appelez l'endpoint `confirm` avec le token de création pour valider l'état réel, plutôt que de vous fier au payload callback reçu.

    Voir [Idempotence du callback](/api-paiement/callback/idempotence) et [Sécurisation du callback](/api-paiement/callback/securisation).
  </Accordion>
</AccordionGroup>

## Business et opérationnel

<AccordionGroup>
  <Accordion title="Quels pays et opérateurs sont supportés ?">
    LigdiCash couvre le Burkina Faso, la Côte d'Ivoire, le Mali, le Niger, le Bénin, le Togo, le Sénégal, la Guinée Conakry et la RD Congo. Les opérateurs supportés incluent Orange Money, Moov Africa, MTN Mobile Money, Wave, Airtel Money, Vodacom, Africell, YAS, Zamani et le Wallet LigdiCash.

    Voir [Opérateurs supportés](/reference/operateurs-supportes) pour le tableau complet.
  </Accordion>

  <Accordion title="Quelle est la devise utilisée dans l'API ?">
    L'API LigdiCash utilise **toujours le XOF**, quelle que soit la devise locale du pays du client. Cela vaut également pour la RD Congo et la Guinée Conakry, dont les devises nationales ne sont pas le XOF — LigdiCash gère la conversion en interne. Les montants sont toujours des **entiers** (le XOF n'a pas de décimales).

    Pour des devises étrangères comme le dollar ou l'euro, c'est au marchand d'effectuer la conversion en XOF avant d'appeler l'API.

    Voir [Devises et montants](/concepts/devises-montants).
  </Accordion>

  <Accordion title="Quels sont les montants minimum et maximum par transaction ?">
    Les limites varient selon l'opérateur et le pays. Contactez votre Partner Manager ou consultez le Dashboard pour les limites en vigueur sur votre compte.

    Voir [Opérateurs supportés](/reference/operateurs-supportes).
  </Accordion>

  <Accordion title="Quels sont les délais de virement vers mon compte bancaire ?">
    Les conditions de reversement (fréquence, délai, seuil minimum) sont définies dans votre contrat de partenariat. Contactez votre Partner Manager pour les détails.
  </Accordion>

  <Accordion title="Comment intégrer LigdiCash sur une boutique WooCommerce ?">
    Un plugin officiel est disponible. Installez-le manuellement depuis votre Dashboard WooCommerce, configurez vos clés API et le comportement du callback, et vous êtes prêt.

    Voir [SDK WordPress / WooCommerce](/sdk/wordpress-woocommerce).
  </Accordion>

  <Accordion title="Existe-t-il des SDK officiels pour mon langage ?">
    Oui. LigdiCash propose des SDK officiels pour PHP, Python, JavaScript/Node.js, Dart/Flutter et un plugin WooCommerce.

    Voir [Vue d'ensemble des SDK](/sdk/vue-ensemble).
  </Accordion>

  <Accordion title="Comment passer en production après mes tests ?">
    Le passage en production suit un processus formel :

    1. Vous complétez votre intégration et vos tests sur le compte temporaire.
    2. L'équipe technique LigdiCash effectue des **tests de validation** de votre intégration.
    3. Un **procès-verbal (PV) est signé** entre vous et LigdiCash pour officialiser la fin de l'intégration.
    4. L'équipe technique active votre projet de production. Seules vos clés changent — le code reste identique.

    Consultez aussi la checklist technique pour préparer votre intégration avant la validation.

    Voir [Checklist de mise en production](/guides/checklist-production).
  </Accordion>
</AccordionGroup>
