1. Vue d'ensemble — Intégrations natives
Codinfy inclut nativement 5 passerelles préconfigurées. Les clés sont gérées depuis Admin > Paramètres > APIs — jamais hardcodées dans le code.
| Gateway | Statut | Type | Marchés principaux |
| CinetPay |
Natif Live |
Afrique |
CI, SN, CM, BF, ML, TG, BJ, MG |
| TouchPay / InTouch |
Natif Live |
Afrique |
CI, SN, CM, BJ, MG, GN |
| KKiaPay |
Natif Live |
Afrique |
BJ, TG, CI, SN, GN |
| Stripe |
Live |
International |
190+ pays, carte, SEPA, Apple Pay… |
| PayPal |
Progressif |
International |
200+ pays, PayPal balance, carte |
Principe Codinfy : toutes les clés API de paiement sont stockées dans tbl_config (BDD), jamais dans .env ni dans le code source. Modifiables en temps réel depuis l'admin sans redéploiement.
2. CinetPay — Configuration détaillée
CinetPay est la passerelle pan-africaine de référence en Afrique francophone. Elle supporte Mobile Money, carte bancaire et wallet.
Clés à renseigner dans Admin > Paramètres > APIs
| Clé config | Description | Obligatoire |
cinetpay_api_key | Clé API CinetPay (account settings) | Oui |
cinetpay_site_id | Site ID de votre application CinetPay | Oui |
cinetpay_secret_key | Clé secrète HMAC pour validation webhook | Oui |
cinetpay_channels | Canaux activés (ex: MOBILE_MONEY,CREDIT_CARD) | Non |
cinetpay_lang | Langue du checkout (fr ou en) | Non |
URL Webhook à déclarer dans CinetPay
https://votredomaine.com/api/payments/webhooks/cinetpay
Flux de paiement
- Codinfy appelle
POST /v2/payment → CinetPay retourne un payment_url.
- Le client est redirigé vers le payment_url CinetPay pour finaliser.
- CinetPay envoie un webhook POST vers l'URL déclarée.
- Codinfy valide le HMAC
x-token, vérifie via /v2/payment/check et active la licence.
Vérification de statut (réconciliation manuelle)
POST https://api-checkout.cinetpay.com/v2/payment/check
{
"apikey": "{cinetpay_api_key}",
"site_id": "{cinetpay_site_id}",
"transaction_id": "{gateway_ref}"
}
Toujours vérifier le statut via /v2/payment/check avant de valider manuellement une facture. Ne jamais se fier uniquement à la redirection navigateur.
3. TouchPay / InTouch — Configuration détaillée
TouchPay (InTouch Group) supporte les paiements Mobile Money directs : Orange Money, MTN MoMo, Moov Money et d'autres opérateurs selon les pays.
Clés à renseigner
| Clé config | Description | Obligatoire |
touchpay_base_url | URL de base InTouch (ex: https://api.intouch.ci) | Oui |
touchpay_merchant_code | Code marchand InTouch | Oui |
touchpay_login_agent | Login agent API | Oui |
touchpay_password_agent | Mot de passe agent API | Oui |
touchpay_basic_username | Username Basic Auth HTTP | Oui |
touchpay_basic_password | Password Basic Auth HTTP | Oui |
touchpay_webhook_secret | Secret pour valider les callbacks webhook | Oui |
touchpay_partner_name | Nom du partenaire (affiché sur le reçu) | Non |
Codes service par opérateur
| Opérateur | Pays | Service Code |
| Orange Money | CI, SN, CM, GN, MG | OMCI, OMSN, OMCM, OMGN |
| MTN MoMo | CI, CM, GN, BJ | MTNCI, MTNCM, MTNGN |
| Moov Money | CI, BJ, TG | MOOVCI, MOOVBJ, MOOVTG |
| Wave | CI, SN | WAVECI, WAVESN |
Flux de paiement (payin direct)
- Le client fournit son numéro Mobile Money et choisit l'opérateur.
- Codinfy appelle
PUT /transaction avec le numéro et le serviceCode.
- InTouch envoie une demande USSD au téléphone du client.
- Le client confirme sur son téléphone → webhook Codinfy reçu.
- Codinfy valide le secret et active la licence.
Vérification de statut
GET {touchpay_base_url}/transaction/{transaction_id}
Authorization: Basic {base64(login:password)}
4. KKiaPay — Configuration détaillée
KKiaPay propose un widget JavaScript embarqué, compatible avec les hébergements mutualisés sans backend Node.js. Le bridge Codinfy gère la page locale.
Clés à renseigner
| Clé config | Description | Obligatoire |
kkiapay_public_key | Clé publique pour le widget JS | Oui |
kkiapay_webhook_secret | Secret pour valider les callbacks x-kkiapay-secret | Oui |
kkiapay_sandbox | true pour tester, false en production | Oui |
kkiapay_theme | Couleur du widget (ex: #6d28d9) | Non |
URL Webhook à déclarer dans KKiaPay
https://votredomaine.com/api/payments/webhooks/kkiapay
Flux de paiement
- Le client clique "Payer" → Codinfy redirige vers
/checkout/kkiapay/{invoice}.
- La page locale charge le widget JS KKiaPay avec la clé publique et le montant.
- Le client paie dans le widget → callback navigateur + webhook serveur.
- Codinfy valide le header
x-kkiapay-secret et active la licence.
Considérer le webhook serveur comme source de vérité — pas la seule redirection navigateur. Les redirections peuvent échouer si le client ferme l'onglet.
5. Stripe — Configuration
Stripe est la référence mondiale pour les paiements par carte, SEPA, Apple Pay et Google Pay.
Clés à renseigner
| Clé config | Description |
stripe_secret_key | Clé secrète Stripe (sk_live_…) |
stripe_publishable_key | Clé publique Stripe (pk_live_…) |
stripe_webhook_secret | Secret du webhook Stripe (whsec_…) |
URL Webhook à déclarer dans Stripe Dashboard
https://votredomaine.com/api/payments/webhooks/stripe
Événements : checkout.session.completed, payment_intent.succeeded, charge.refunded
Flux de paiement
- Codinfy crée une Checkout Session Stripe via l'API.
- Le client est redirigé vers la page Stripe hébergée.
- Stripe envoie un webhook
checkout.session.completed.
- Codinfy valide la signature Stripe et active la licence.
6. PayPal — Configuration
| Clé config | Description |
paypal_client_id | Client ID de l'application PayPal |
paypal_client_secret | Client Secret de l'application PayPal |
paypal_mode | sandbox ou live |
paypal_webhook_id | ID du webhook dans PayPal Developer Dashboard |
URL Webhook
https://votredomaine.com/api/payments/webhooks/paypal
Événements : PAYMENT.CAPTURE.COMPLETED, PAYMENT.CAPTURE.REFUNDED
7. Routes techniques — Checkout & Webhooks
| Usage | Route | Notes |
| Checkout API | POST /api/payments/checkout | Nécessite auth Sanctum. Crée facture + payload checkout. |
| Webhook universel | GET|POST /api/payments/webhooks/{gateway} | Le paramètre {gateway} : cinetpay, touchpay, kkiapay, stripe, paypal. |
| Checkout boutique | POST /boutique/{product}/acheter | Flux direct depuis la fiche produit (auth requis). |
| Bridge KKiaPay | GET /checkout/kkiapay/{invoice} | Page locale avec widget JS — compatible mutualisé. |
| Validation manuelle | POST /admin/paiements/{invoice}/mark-paid | Back-office uniquement, avec trace audit log. |
| Remboursement | POST /admin/paiements/{invoice}/refund | Déclenche remboursement + suspension licence. |
Les URL webhook doivent être en HTTPS et accessibles publiquement. Vérifiez que votre hébergement o2switch ne bloque pas les requêtes POST entrantes sur ces routes.
8. Afrique de l'Ouest — Passerelles additionnelles
FedaPay
BJ, TG, SN, CI
Sur demande
PayDunya
SN, CI, ML, BF
Sur demande
Hub2
CI, SN, ML, BF, GN
Sur demande
FEEXPAY
BJ, TG, CI, GN
Sur demande
CashPay (SEMOA)
CI, SN, BF
Sur demande
Orange Money
CI, SN, ML, CM, GN
Sur demande
MTN MoMo
CI, GH, CM, NG, UG
Sur demande
Moov Money
CI, BJ, TG, BF
Sur demande
Paystack
NG, GH, ZA, KE
Sur demande
9. Afrique Centrale & de l'Est (partiel)
Airtel Money
CD, TZ, UG, ZM, MG
Sur demande
Flutterwave
Panafricain
Sur demande
M-Pesa
KE, TZ, MZ, GH
Sur demande
10. Afrique de l'Est
Pesapal
KE, UG, TZ, ZM
Sur demande
DPO Pay
Panafricain 54 pays
Sur demande
Cellulant
18 pays africains
Sur demande
Tigo Pesa
TZ, RW
Sur demande
11. Afrique du Nord & Moyen-Orient
Paymob
EG, JO, PK
Sur demande
12. Afrique Australe
Peach Payments
ZA, KE, MZ
Sur demande
SnapScan / Ozow
ZA
Sur demande
PayU Africa
ZA, NG, KE
Sur demande
13. Mondial — Passerelles internationales
PayPal
200+ pays
Progressif
Braintree
Global
Sur demande
Checkout.com
Global
Sur demande
2Checkout / Verifone
Global
Sur demande
Klarna
Europe, US
Sur demande
Authorize.Net
US, CA
Sur demande
Square
US, CA, AU, UK
Sur demande
14. Paiements Crypto
Coinbase Commerce
BTC, ETH, USDC, DAI
Sur demande
BitPay
BTC, ETH, XRP, LTC
Sur demande
NOWPayments
300+ cryptos
Sur demande
Binance Pay
BNB, USDT, BTC
Sur demande
Les paiements crypto nécessitent une confirmation de bloc avant d'activer la licence. Prévoir une latence de 10–30 minutes selon la blockchain. Le PaymentService Codinfy gère le polling de confirmation via webhook.
15. Bonnes pratiques d'intégration
Côté serveur
- Ne jamais activer une licence sans confirmation serveur (webhook ou check API).
- Toujours valider la signature du webhook avant traitement.
- Journaliser la référence distante (
gateway_ref) dès réception.
- Stocker les clés API uniquement dans
tbl_config, jamais dans .env ni le code.
- Utiliser le mode sandbox pour tous les tests pré-production.
Côté client / checkout
- Afficher le résumé de commande avant le paiement (produit, licence, prix, devise).
- Permettre l'application de coupons et du wallet avant paiement.
- Proposer un upsell de licence au checkout (Standard → Extended → Agency).
- Rediriger vers la page de confirmation avec le statut de la facture.
- Ne pas afficher de clé publique Stripe côté serveur (uniquement dans les assets JS).
Réconciliation
- Lancer
codinfy:sync-pending-invoices toutes les heures (cron).
- Vérifier manuellement les factures pending > 24h.
- Utiliser le bouton Vérifier admin avant toute validation manuelle.
- Documenter toute validation manuelle dans les notes de la facture.
Sécurité
- Déclarer les URL webhook en HTTPS uniquement.
- Vérifier le header de signature propre à chaque gateway.
- Logger toutes les tentatives de webhook invalides.
- Alerter si une gateway envoie un webhook avec une référence déjà traitée (doublon).