🔌

CPlus Developer Hub

Intégrez les paiements Mobile Money et carte bancaire
dans vos applications en quelques minutes.

Ce que vous pouvez faire

📱

Collection Mobile Money

Encaissez via Airtel Money et MTN MoMo. Notification USSD automatique au client.

Voir la doc →
💳

Collection par Carte

Liens de paiement sécurisés via CyberSource et MIGS (Visa/Mastercard).

Voir la doc →
💸

Décaissement MoMo

Envoyez des fonds vers Airtel Money ou MTN MoMo. Remboursements et paiements fournisseurs.

Voir la doc →
🔗

Pay Links & QR Codes

Liens de paiement partageables par SMS, WhatsApp ou Email avec QR intégré.

Voir la doc →
🔔

Webhooks

Notifications temps réel sur votre endpoint à chaque changement de statut de paiement.

Voir la doc →
🔑

API Keys

Clés avec permissions granulaires (collect, disburse, transactions, pay_links).

Gérer mes clés →

⚡ Démarrage rapide

1

Créer un compte sandbox

Remplissez le formulaire ci-dessous pour obtenir un accès sandbox gratuit.

2

Générer une API Key

Portail merchant → API Keys → Créer une clé avec les permissions souhaitées.

3

Premier appel API

Ajoutez X-API-Key: sk_live_xxx dans vos headers.

4

Passer en production

Après validation sandbox, contactez-nous pour activer votre compte production.

💻 Exemples de code

# 📱 Collection Airtel Money
curl -X POST https://api.c-pay.global/api/v1/merchant/public/collect \
  -H "X-API-Key: sk_live_votre_cle" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 5000,
    "currency": "XAF",
    "customerPhone": "+242060000001",
    "method": "airtel_money",
    "description": "Commande #001",
    "reference": "CMD-2026-001"
  }'

# 💸 Décaissement MTN MoMo
curl -X POST https://api.c-pay.global/api/v1/merchant/disburse \
  -H "X-API-Key: sk_live_votre_cle" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 10000,
    "currency": "XAF",
    "recipientPhone": "+242055000001",
    "operator": "mtn_momo",
    "description": "Remboursement client"
  }'

# 🔗 Créer un Pay Link carte
curl -X POST https://api.c-pay.global/api/v1/merchant/public/pay-links \
  -H "X-API-Key: sk_live_votre_cle" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 25000,
    "currency": "XAF",
    "description": "Facture INV-001",
    "psp": "cybersource"
  }'
// npm install axios
const axios = require('axios');

const cplus = axios.create({
  baseURL: 'https://api.c-pay.global/api/v1/merchant',
  headers: { 'X-API-Key': 'sk_live_votre_cle' }
});

// 📱 Collection Mobile Money
async function collect(phone, amount, method = 'airtel_money') {
  const { data } = await cplus.post('/public/collect', {
    amount, currency: 'XAF', customerPhone: phone, method
  });
  console.log('TxnId:', data.txnId, '| Statut:', data.status);
  return data;
}

// 💸 Décaissement
async function disburse(phone, amount, operator = 'airtel_money') {
  const { data } = await cplus.post('/disburse', {
    amount, currency: 'XAF', recipientPhone: phone, operator
  });
  return data;
}

// 🔗 Pay Link carte
async function createPayLink(amount, description) {
  const { data } = await cplus.post('/public/pay-links', {
    amount, currency: 'XAF', description, psp: 'cybersource'
  });
  console.log('Lien:', data.short_url);
  return data;
}

// Usage
collect('+242060000001', 5000, 'airtel_money');
createPayLink(25000, 'Facture INV-001');
<?php
// composer require guzzlehttp/guzzle

class CPlusClient {
    private $client;
    const BASE = 'https://api.c-pay.global/api/v1/merchant';

    public function __construct(string $apiKey) {
        $this->client = new \GuzzleHttp\Client([
            'base_uri' => self::BASE,
            'headers'  => ['X-API-Key' => $apiKey, 'Content-Type' => 'application/json']
        ]);
    }

    public function collect(string $phone, float $amount, string $method = 'airtel_money'): array {
        $r = $this->client->post('/public/collect', ['json' => [
            'amount' => $amount, 'currency' => 'XAF',
            'customerPhone' => $phone, 'method' => $method
        ]]);
        return json_decode($r->getBody(), true);
    }

    public function disburse(string $phone, float $amount, string $operator = 'airtel_money'): array {
        $r = $this->client->post('/disburse', ['json' => [
            'amount' => $amount, 'currency' => 'XAF',
            'recipientPhone' => $phone, 'operator' => $operator
        ]]);
        return json_decode($r->getBody(), true);
    }

    public function createPayLink(float $amount, string $desc): array {
        $r = $this->client->post('/public/pay-links', ['json' => [
            'amount' => $amount, 'currency' => 'XAF',
            'description' => $desc, 'psp' => 'cybersource'
        ]]);
        return json_decode($r->getBody(), true);
    }
}

// Usage
$cplus = new CPlusClient('sk_live_votre_cle');
$txn  = $cplus->collect('+242060000001', 5000);
$link = $cplus->createPayLink(25000, 'Facture INV-001');
echo $link['short_url'];
?>
# pip install requests
import requests

class CPlusClient:
    BASE = 'https://api.c-pay.global/api/v1/merchant'

    def __init__(self, api_key: str):
        self.s = requests.Session()
        self.s.headers.update({'X-API-Key': api_key})

    def collect(self, phone, amount, method='airtel_money'):
        return self.s.post(f'{self.BASE}/public/collect', json={
            'amount': amount, 'currency': 'XAF',
            'customerPhone': phone, 'method': method
        }).json()

    def disburse(self, phone, amount, operator='airtel_money'):
        return self.s.post(f'{self.BASE}/disburse', json={
            'amount': amount, 'currency': 'XAF',
            'recipientPhone': phone, 'operator': operator
        }).json()

    def create_pay_link(self, amount, description):
        return self.s.post(f'{self.BASE}/public/pay-links', json={
            'amount': amount, 'currency': 'XAF',
            'description': description, 'psp': 'cybersource'
        }).json()

# Usage
client = CPlusClient('sk_live_votre_cle')
txn  = client.collect('+242060000001', 5000, 'airtel_money')
link = client.create_pay_link(25000, 'Facture INV-001')
print(link['short_url'])
// build.gradle: implementation("com.squareup.retrofit2:retrofit:2.9.0")

interface CPlusApi {
    @POST("merchant/public/collect")
    suspend fun collect(@Body req: CollectRequest): TxnResponse

    @POST("merchant/disburse")
    suspend fun disburse(@Body req: DisburseRequest): TxnResponse

    @POST("merchant/public/pay-links")
    suspend fun createPayLink(@Body req: PayLinkRequest): PayLinkResponse
}

data class CollectRequest(val amount: Double, val currency: String = "XAF",
    val customerPhone: String, val method: String)
data class DisburseRequest(val amount: Double, val currency: String = "XAF",
    val recipientPhone: String, val operator: String)
data class PayLinkRequest(val amount: Double, val currency: String = "XAF",
    val description: String, val psp: String = "cybersource")
data class TxnResponse(val success: Boolean, val txnId: String?, val status: String?)
data class PayLinkResponse(val pay_link_id: String?, val short_url: String?)

// Client
val api = Retrofit.Builder()
    .baseUrl("https://api.c-pay.global/api/v1/")
    .addConverterFactory(GsonConverterFactory.create())
    .client(OkHttpClient.Builder().addInterceptor { chain ->
        chain.proceed(chain.request().newBuilder()
            .addHeader("X-API-Key", "sk_live_votre_cle").build())
    }.build())
    .build().create(CPlusApi::class.java)

// Usage dans un ViewModel
viewModelScope.launch {
    val txn = api.collect(CollectRequest(5000.0, customerPhone="+242060000001", method="airtel_money"))
    Log.d("CPlus", "TxnId: ${txn.txnId}")
}

🔔 Webhooks

Recevez des notifications HTTP POST quand un paiement change de statut.

// Payload reçu sur votre endpoint
{
  "event": "payment.completed",
  "txnId": "550e8400-e29b-41d4-a716-446655440000",
  "reference": "CMD-2026-001",
  "amount": 5000,
  "currency": "XAF",
  "status": "authorized",
  "method": "airtel_money",
  "timestamp": "2026-07-11T10:00:00Z",
  "signature": "sha256=abc123..."
}

// Vérification signature (Node.js)
const crypto = require('crypto');
app.post('/webhook', (req, res) => {
  const sig = req.headers['x-cplus-signature'];
  const expected = 'sha256=' + crypto
    .createHmac('sha256', process.env.WEBHOOK_SECRET)
    .update(JSON.stringify(req.body)).digest('hex');
  if (sig !== expected) return res.status(401).end();
  // Traiter le paiement...
  res.json({ received: true });
});

📋 Endpoints principaux

POST/merchant/public/collect
Encaissement Mobile Money (Airtel Money, MTN MoMo)
POST/merchant/disburse
Décaissement vers Mobile Money
POST/merchant/public/pay-links
Créer un lien de paiement carte
GET/merchant/public/transactions
Historique des transactions
POST/merchant/auth/login
Authentification JWT
⚡ Voir tous les endpoints →

🚀 Compte sandbox gratuit

Créez votre compte de test et commencez à intégrer en quelques minutes.

📝 Inscription Développeur

Demande envoyée !
Vous recevrez vos credentials sandbox par email sous 24h. En attendant, explorez la documentation API.

⬆️ Passer en production

Après validation de votre intégration sandbox, demandez l'accès à l'environnement de production.

🏪 Demande d'accès Production

ℹ️ Votre demande sera examinée sous 48h. Un KYB simplifié sera requis.
🎉
Demande envoyée !
Notre équipe examinera votre dossier sous 48h. Vous recevrez vos credentials production par email.

💬 Support

📖

API Reference

Documentation interactive Swagger avec tous les endpoints et exemples.

Ouvrir →
📧

Email Support

Notre équipe technique répond sous 24h.

dev@c-pay.global
💬

WhatsApp Dev

Support rapide via WhatsApp pour les développeurs.

Rejoindre →

🛒 Plugin WooCommerce

🛒
CPlus Payment Gateway
Version 2.6.0 · WooCommerce 6.0+ · PHP 7.4+

Intégrez CPlus à votre boutique WooCommerce. Acceptez Airtel Money, MTN MoMo et carte bancaire en Zone CEMAC.

🔴 Airtel Money 🟡 MTN MoMo 💳 Carte Bancaire
📦 Télécharger le Plugin 📖 Documentation API
Installation rapide :
1. WP Admin → Extensions → Ajouter → Téléverser
2. Sélectionner cplus-payment-gateway-v2.6.0.zip
3. Activer → WooCommerce → Réglages → Paiements → CPlus
4. Entrer API Key + Secret (merchant.c-pay.global → API Keys)
5. URL Webhook : https://votresite.com/wc-api/cplus_webhook

📱 SDK Android

📱
CPlus Android SDK
v2.6.0 · Kotlin/Java · Android API 21+ · AAR
Kotlin Java Android 5.0+
📦 Télécharger SDK
// 1. Initialiser
CPlus.init(context, CPlusConfig(
    apiKey    = "sk_live_xxx",
    apiSecret = "sk_secret_xxx",
    env       = CPlusEnv.PRODUCTION
))

// 2. Encaisser
CPlus.collect(activity, amount = 5000.0, reference = "CMD-001",
    onSuccess = { txn -> confirmerCommande(txn.txnId) },
    onError   = { err -> afficherErreur(err.message) }
)

// 3. Scanner QR
CPlus.scanQR(activity, onResult = { qrData -> traiterQR(qrData) })

📱 Application Android

📱
CPlus App — Android
v2.6.0 · Kotlin · Android API 24+ · Projet Android Studio
💳 Porteur de carte 🏪 Marchand Play Store Ready
📧 Demander l'accès
// Connexion Marchand
val response = ApiClient.api.merchantLogin(LoginRequest(email, password))
SessionManager.saveSession(response.accessToken, userId, userName, type = "merchant")

// Encaissement
ApiClient.api.merchantCollect(CollectRequest(
    amount = 5000.0, customerPhone = "+242060000001",
    method = "airtel_money", reference = "CMD-001"
))