Démarrage rapide
Ce guide vous accompagne de la création de votre compte à votre premier paiement Mobile Money. Temps estimé : 5 minutes.
Les paiements Kadryza sont traités en XAF (Franc CFA CEMAC). Opérateurs supportés : Airtel Money et Moov Money (Tchad 🇹🇩).
Créer un compte merchant
Rendez-vous sur le dashboard Kadryza et créez votre compte.
Vous aurez besoin de :
- Une adresse email valide
- Un numéro de téléphone tchadien (+235XXXXXXXX)
- Les informations de votre entreprise
Une fois inscrit, vous accédez immédiatement à votre tableau de bord.
Obtenir une clé API
Depuis votre dashboard, accédez à API Keys → Créer une clé.
Votre clé API est générée au format :
kadryza_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxSécurité critique — Votre clé API n’est affichée qu’une seule fois à la création. Copiez-la immédiatement et stockez-la dans un endroit sécurisé (gestionnaire de secrets, variable d’environnement). Ne la commitez jamais dans votre code source.
Ajoutez votre clé dans un fichier .env :
KADRYZA_API_KEY=kadryza_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxInstaller le SDK
npm install @kadryza/sdkLe SDK doit être utilisé côté serveur uniquement (Node.js). Ne l’importez jamais dans du code exécuté côté navigateur — votre clé API serait exposée.
Initier votre premier paiement
/v1/transactionsInitier une transaction de paiement Mobile Money
| Paramètre | Type | Requis | Description |
|---|---|---|---|
reference | string | requis | Référence unique de votre commande (ex: order_abc123) |
amount | integer | requis | Montant en XAF — entier positif, jamais de décimales |
currency | string | requis | "XAF" uniquement |
operator | string | requis | "AIRTEL" ou "MOOV" |
phone_number | string | requis | Numéro au format international : +235XXXXXXXX |
description | string | optionnel | Description du paiement — max 255 caractères |
import Kadryza from '@kadryza/sdk'
// Initialiser le client avec votre clé API
const kadryza = new Kadryza({
apiKey: process.env.KADRYZA_API_KEY
})
async function premierPaiement() {
try {
const transaction = await kadryza.transactions.initiate({
reference: 'order_abc123',
amount: 5000,
currency: 'XAF',
operator: 'AIRTEL',
phone_number: '+23566000000',
description: 'Paiement commande #ABC123'
})
console.log('Transaction créée !')
console.log('ID:', transaction.id)
console.log('Référence interne:', transaction.internal_ref)
console.log('Statut:', transaction.status)
console.log('Expire à:', transaction.expires_at)
} catch (error) {
if (error.code === 'VALIDATION_ERROR') {
console.error('Paramètres invalides:', error.fields)
} else if (error.code === 'UNAUTHORIZED') {
console.error('Clé API invalide — vérifiez votre configuration')
} else {
console.error('Erreur inattendue:', error.message)
}
}
}
premierPaiement()Réponse 201 Created :
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"reference": "order_abc123",
"internal_ref": "KADRYZA-A1B2C3D4",
"amount": 5000,
"currency": "XAF",
"operator": "AIRTEL",
"phone_number": "+23566000000",
"description": "Paiement commande #ABC123",
"status": "PENDING",
"created_at": "2025-01-15T10:00:00Z",
"expires_at": "2025-01-15T10:05:00Z"
}Le statut initial est toujours PENDING. La transaction expire après 5 minutes si l’utilisateur ne confirme pas le paiement sur son téléphone.
Idempotence — Si vous envoyez deux fois la même reference, Kadryza retourne la transaction existante
sans créer de doublon. Utilisez cette propriété pour gérer les retries réseau en toute sécurité.
Configurer un webhook
Le statut d’une transaction change de façon asynchrone. L’utilisateur confirme (ou refuse) le paiement sur son téléphone. Ne pollez pas l’API pour vérifier le statut — utilisez les webhooks.
Depuis votre dashboard, accédez à Webhooks → Ajouter un endpoint et configurez l’URL de réception.
Voici un exemple complet de réception de webhook :
import Kadryza from '@kadryza/sdk'
import express from 'express'
const app = express()
const kadryza = new Kadryza({
apiKey: process.env.KADRYZA_API_KEY
})
// IMPORTANT : utiliser express.raw() pour le webhook
// afin de préserver le body brut pour la vérification de signature
app.post('/webhooks/kadryza', express.raw({ type: 'application/json' }), (req, res) => {
const signature = req.headers['x-kadryza-signature']
const payload = req.body.toString()
// Vérifier la signature AVANT tout traitement
const isValid = kadryza.webhooks.verifySignature({
payload,
signature,
secret: process.env.KADRYZA_WEBHOOK_SECRET
})
if (!isValid) {
console.error('Signature webhook invalide — requête rejetée')
return res.status(401).json({ error: 'Signature invalide' })
}
// Répondre immédiatement avec 200 pour acquitter la réception
res.status(200).json({ received: true })
// Traiter l'événement de manière asynchrone
const event = JSON.parse(payload)
switch (event.event) {
case 'transaction.success':
console.log('✅ Paiement réussi:', event.data.reference)
console.log(' Montant:', event.data.amount, 'XAF')
// Mettre à jour la commande dans votre base de données
break
case 'transaction.failed':
console.log('❌ Paiement échoué:', event.data.reference)
// Notifier le client et proposer un nouveau paiement
break
case 'transaction.timeout':
console.log('⏰ Paiement expiré:', event.data.reference)
// La transaction a expiré après 5 minutes sans confirmation
break
default:
console.log('Événement inconnu:', event.event)
}
})
app.listen(3000, () => {
console.log('Webhook handler actif sur le port 3000')
})Étapes suivantes
Vous avez intégré Kadryza avec succès ! Voici les prochaines lectures recommandées :
| Ressource | Description |
|---|---|
| Authentification | Comprendre les clés API et les bonnes pratiques de sécurité |
| Référence API — Transactions | Tous les endpoints transactions en détail |
| Référence API — Webhooks | Events, payload, retry policy |
| Guide Next.js | Intégration complète dans une app Next.js |
| Guide Express.js | Intégration complète dans une app Express.js |
| Codes d’erreur | Toutes les erreurs possibles et leurs solutions |