C Codinfyby RAFLOX SAS
Paiements · Afrique · Global · Crypto

Passerelles de Paiement Codinfy

3 intégrations natives incluses (CinetPay, TouchPay, KKiaPay) + Stripe + PayPal. Plus de 50 passerelles additionnelles intégrables sur demande pour couvrir l'Afrique complète et le marché mondial.

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.

GatewayStatutTypeMarché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é configDescriptionObligatoire
cinetpay_api_keyClé API CinetPay (account settings)Oui
cinetpay_site_idSite ID de votre application CinetPayOui
cinetpay_secret_keyClé secrète HMAC pour validation webhookOui
cinetpay_channelsCanaux activés (ex: MOBILE_MONEY,CREDIT_CARD)Non
cinetpay_langLangue du checkout (fr ou en)Non

URL Webhook à déclarer dans CinetPay

https://votredomaine.com/api/payments/webhooks/cinetpay

Flux de paiement

  1. Codinfy appelle POST /v2/payment → CinetPay retourne un payment_url.
  2. Le client est redirigé vers le payment_url CinetPay pour finaliser.
  3. CinetPay envoie un webhook POST vers l'URL déclarée.
  4. 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é configDescriptionObligatoire
touchpay_base_urlURL de base InTouch (ex: https://api.intouch.ci)Oui
touchpay_merchant_codeCode marchand InTouchOui
touchpay_login_agentLogin agent APIOui
touchpay_password_agentMot de passe agent APIOui
touchpay_basic_usernameUsername Basic Auth HTTPOui
touchpay_basic_passwordPassword Basic Auth HTTPOui
touchpay_webhook_secretSecret pour valider les callbacks webhookOui
touchpay_partner_nameNom du partenaire (affiché sur le reçu)Non

Codes service par opérateur

OpérateurPaysService Code
Orange MoneyCI, SN, CM, GN, MGOMCI, OMSN, OMCM, OMGN
MTN MoMoCI, CM, GN, BJMTNCI, MTNCM, MTNGN
Moov MoneyCI, BJ, TGMOOVCI, MOOVBJ, MOOVTG
WaveCI, SNWAVECI, WAVESN

Flux de paiement (payin direct)

  1. Le client fournit son numéro Mobile Money et choisit l'opérateur.
  2. Codinfy appelle PUT /transaction avec le numéro et le serviceCode.
  3. InTouch envoie une demande USSD au téléphone du client.
  4. Le client confirme sur son téléphone → webhook Codinfy reçu.
  5. 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é configDescriptionObligatoire
kkiapay_public_keyClé publique pour le widget JSOui
kkiapay_webhook_secretSecret pour valider les callbacks x-kkiapay-secretOui
kkiapay_sandboxtrue pour tester, false en productionOui
kkiapay_themeCouleur du widget (ex: #6d28d9)Non

URL Webhook à déclarer dans KKiaPay

https://votredomaine.com/api/payments/webhooks/kkiapay

Flux de paiement

  1. Le client clique "Payer" → Codinfy redirige vers /checkout/kkiapay/{invoice}.
  2. La page locale charge le widget JS KKiaPay avec la clé publique et le montant.
  3. Le client paie dans le widget → callback navigateur + webhook serveur.
  4. 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é configDescription
stripe_secret_keyClé secrète Stripe (sk_live_…)
stripe_publishable_keyClé publique Stripe (pk_live_…)
stripe_webhook_secretSecret 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

  1. Codinfy crée une Checkout Session Stripe via l'API.
  2. Le client est redirigé vers la page Stripe hébergée.
  3. Stripe envoie un webhook checkout.session.completed.
  4. Codinfy valide la signature Stripe et active la licence.

6. PayPal — Configuration

Clé configDescription
paypal_client_idClient ID de l'application PayPal
paypal_client_secretClient Secret de l'application PayPal
paypal_modesandbox ou live
paypal_webhook_idID 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

UsageRouteNotes
Checkout APIPOST /api/payments/checkoutNécessite auth Sanctum. Crée facture + payload checkout.
Webhook universelGET|POST /api/payments/webhooks/{gateway}Le paramètre {gateway} : cinetpay, touchpay, kkiapay, stripe, paypal.
Checkout boutiquePOST /boutique/{product}/acheterFlux direct depuis la fiche produit (auth requis).
Bridge KKiaPayGET /checkout/kkiapay/{invoice}Page locale avec widget JS — compatible mutualisé.
Validation manuellePOST /admin/paiements/{invoice}/mark-paidBack-office uniquement, avec trace audit log.
RemboursementPOST /admin/paiements/{invoice}/refundDé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

Wave

CI, SN

Sur demande

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

Free Money

SN

Sur demande

ExpressPay

GH

Sur demande

Slydepay

GH

Sur demande

Paystack

NG, GH, ZA, KE

Sur demande

Interswitch

NG

Sur demande

Paga

NG

Sur demande

Remita

NG

Sur demande

9. Afrique Centrale & de l'Est (partiel)

Smobilpay

CM

Sur demande

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

IntaSend

KE

Sur demande

Tigo Pesa

TZ, RW

Sur demande

11. Afrique du Nord & Moyen-Orient

CMI

MA

Sur demande

Fawry

EG

Sur demande

Paymob

EG, JO, PK

Sur demande

Konnect

TN

Sur demande

12. Afrique Australe

Peach Payments

ZA, KE, MZ

Sur demande

PayFast

ZA

Sur demande

SnapScan / Ozow

ZA

Sur demande

PayU Africa

ZA, NG, KE

Sur demande

EcoCash

ZW

Sur demande

13. Mondial — Passerelles internationales

Stripe

190+ pays

Live

PayPal

200+ pays

Progressif

Braintree

Global

Sur demande

Adyen

Global

Sur demande

Checkout.com

Global

Sur demande

2Checkout / Verifone

Global

Sur demande

Mollie

Europe

Sur demande

Klarna

Europe, US

Sur demande

Authorize.Net

US, CA

Sur demande

Square

US, CA, AU, UK

Sur demande

Razorpay

IN

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).