RÉFÉRENCE API REST V1 — NODERA PAY

Documentation & Intégration REST API

Intégrez les paiements automatisés Wave QR, Orange Money, MTN MoMo et Moov Money dans Mikhmon, vos portails captifs Wi-Fi, sites e-commerce ou applications SaaS rapidement et en toute sécurité.

1. URL de Base & Adresses IP Passerelle

Point d'accès REST API principal et adresse IP sortante certifiée NODERA PAY.

Point d'Accès de Base (Base Endpoint)
https://gateway.airnetsolution.com/api/v1/noderapay

Préfixez tous vos appels API avec cette URL de base.

IP Serveur Sortante (Webhook Outbound)
195.88.211.243

Ajoutez cette adresse IP à la liste blanche (whitelist) de votre pare-feu serveur pour les webhooks.

Authentification & Identifiants de Requête :

Authentifiez vos requêtes via le corps JSON ou les en-têtes HTTP :

Méthode 1 : Paramètres JSON Body
{
  "code_merchant": "NP-YOURMERCHANT",
  "api_key": "np_live_your_api_key"
}
Méthode 2 : En-têtes HTTP (Headers)
X-Merchant-Code: NP-YOURMERCHANT
X-Api-Key: np_live_your_api_key

2. Création d'une Transaction de Paiement

Utilisez ce point de terminaison pour générer une demande de paiement Wave QR ou Mobile Money et obtenir l'URL de checkout.

POST https://gateway.airnetsolution.com/api/v1/noderapay/create-transaction

Paramètres de la Requête (JSON Body)

Paramètre Type Statut Description Exemple
amount integer Requis Montant de la transaction en FCFA (minimum 100 FCFA) 5000
ref_id string Requis Identifiant unique de transaction généré par votre application (max 100 caractères) HOTSPOT-123456
customer_name string Optionnel Nom complet de l'abonné / client Kouassi Jean
customer_phone string Optionnel Numéro de téléphone / WhatsApp de l'abonné pour notification et reçu (+225...) +2250700000000
notes string Optionnel Description du forfait, abonnement Internet ou numéro de facture Forfait Fibre 50 Mbps — 1 Mois
callback_url string Optionnel URL de webhook dynamique spécifique pour cette transaction uniquement https://monfai.airnetsolution.com/webhook
fee_bearer string Optionnel Prise en charge des frais : CUSTOMER (ajouté au total client) ou MERCHANT (déduit du solde) CUSTOMER
expired_time integer Optionnel Délai d'expiration du lien de paiement en minutes (par défaut 15 min) 15

Exemples de Code Multi-Langages :

<?php
$apiUrl       = "https://gateway.airnetsolution.com/api/v1/noderapay/create-transaction";
$merchantCode = "NP-YOURMERCHANT";
$apiKey       = "np_live_your_api_key";

$data = [
    'code_merchant'  => $merchantCode,
    'api_key'        => $apiKey,
    'amount'         => 5000, // En FCFA
    'ref_id'         => 'HOTSPOT-' . time(),
    'customer_name'  => 'Abonné Wi-Fi',
    'customer_phone' => '+2250700000000',
    'notes'          => 'Pass Internet 1 Mois 25 Mbps',
    'expired_time'   => 15,
];

$ch = curl_init($apiUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/json',
    'Accept: application/json'
]);

$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);

if (isset($result['status']) && $result['status'] === 'success') {
    $qrUrl   = $result['data']['qr_url'];
    $payUrl  = $result['data']['checkout_url'];
    echo "Lien de paiement Wave / Mobile Money : " . $payUrl;
} else {
    echo "Échec : " . ($result['message'] ?? 'Erreur inconnue');
}
curl -X POST "https://gateway.airnetsolution.com/api/v1/noderapay/create-transaction" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
    "code_merchant": "NP-YOURMERCHANT",
    "api_key": "np_live_your_api_key",
    "amount": 5000,
    "ref_id": "FACT-202610-001",
    "customer_name": "Kouassi Jean",
    "customer_phone": "+2250700000000",
    "notes": "Facture Fibre Optique Octobre 2026",
    "expired_time": 15
  }'
import axios from 'axios';

const createPayment = async () => {
  try {
    const res = await axios.post('https://gateway.airnetsolution.com/api/v1/noderapay/create-transaction', {
      code_merchant: 'NP-YOURMERCHANT',
      api_key: 'np_live_your_api_key',
      amount: 5000,
      ref_id: `COMMANDE-${Date.now()}`,
      customer_name: 'Kouassi Jean',
      customer_phone: '+2250700000000',
      notes: 'Abonnement Mensuel Internet',
      expired_time: 15
    });

    if (res.data.status === 'success') {
      console.log('Wave QR Code URL :', res.data.data.qr_url);
      console.log('Checkout URL :', res.data.data.checkout_url);
    }
  } catch (err) {
    console.error('Erreur API :', err.response?.data || err.message);
  }
};

createPayment();
import requests

url = "https://gateway.airnetsolution.com/api/v1/noderapay/create-transaction"
payload = {
    "code_merchant": "NP-YOURMERCHANT",
    "api_key": "np_live_your_api_key",
    "amount": 5000,
    "ref_id": "COMMANDE-123456",
    "customer_name": "Kouassi Jean",
    "customer_phone": "+2250700000000",
    "notes": "Facture Mensuelle",
    "expired_time": 15
}
headers = {
    "Content-Type": "application/json",
    "Accept": "application/json"
}

res = requests.post(url, json=payload, headers=headers)
data = res.json()

if res.status_code == 200 and data.get('status') == 'success':
    print("Wave QR URL :", data['data']['qr_url'])
    print("Checkout URL :", data['data']['checkout_url'])
else:
    print("Erreur :", data.get('message'))

3. Vérification du Statut d'une Transaction

Consultez l'état d'avancement d'un règlement à tout moment à l'aide de trx_reference ou de votre ref_id.

GET https://gateway.airnetsolution.com/api/v1/noderapay/get-status

Paramètres de Requête (Query Parameters)

Paramètre Type Statut Description
trx_reference string Requis (ou ref_id) Référence de transaction attribuée par NODERA PAY
ref_id string Requis (ou trx_reference) Votre référence interne transmise lors de la création
code_merchant string Requis Votre code identifiant marchand
api_key string Requis Votre clé API secrète (dans l'URL ou via l'en-tête X-Api-Key)
// URL de Requête GET
GET https://gateway.airnetsolution.com/api/v1/noderapay/get-status?code_merchant=NP-YOURMERCHANT&api_key=np_live_your_api_key&trx_reference=NP-20261004-8912301

// Réponse JSON (Paiement Validé)
{
  "status": "success",
  "data": {
    "trx_reference": "NP-20261004-8912301",
    "ref_id": "HOTSPOT-123456",
    "amount": 5000,
    "fee": 50,
    "status": "PAID",
    "payment_method": "WAVE_CI",
    "paid_at": "2026-10-04 15:32:10"
  }
}

4. Webhook de Notification & Signature HMAC

Notification HTTP POST instantanée dès qu'un abonné effectue son paiement avec succès.

Formule de Calcul de Signature Sécurisée (HMAC SHA-256)
signature = hash('sha256', $trx_reference . $ref_id . $amount . $api_key)

Exemple de Script Webhook en Réception (PHP) :

<?php
$apiKey = "np_live_your_api_key";

$rawPayload = file_get_contents('php://input');
$payload = json_decode($rawPayload, true);

if (!$payload) {
    http_response_code(400);
    exit(json_encode(['status' => 'error', 'message' => 'JSON Invalide']));
}

$trxRef     = $payload['trx_reference'] ?? '';
$refId      = $payload['ref_id'] ?? '';
$amount     = $payload['amount'] ?? 0;
$signature  = $payload['signature'] ?? '';

$expectedSignature = hash('sha256', $trxRef . $refId . $amount . $apiKey);

if (!hash_equals($expectedSignature, $signature)) {
    http_response_code(403);
    exit(json_encode(['status' => 'error', 'message' => 'Signature Invalide']));
}

if (($payload['status'] ?? '') === 'paid') {
    // Paiement réussi ! Activer le coupon Wi-Fi ou prolonger l'accès PPPoE de l'abonné
}

http_response_code(200);
echo json_encode(['status' => 'ok']);

5. Conditions Générales & Tarification

Règles contractuelles, structure tarifaire transparente et reversements de solde.

Inscription Marchand Rapide (No-KYC Onboarding)

La création de compte sur NODERA PAY est immédiate. Vos identifiants Merchant Code et clés API en production sont activés sans délais d'attente administratifs superflus.

Structure Tarifaire Claire (Transparent Fee)

Wave QR : Frais de 1% par transaction réussie.
Mobile Money (Orange, MTN, Moov) : Frais de 1.5% par transaction validée.
Frais prélevés à la transaction sans abonnement fixe mensuel.

Reversements & Règlements de Solde (Payouts)

Vous pouvez demander le reversement de votre solde marchand à tout moment vers vos comptes Wave, Orange Money, MTN MoMo, Moov Money ou comptes bancaires UEMOA depuis le tableau de bord.

Conformité Légale & Activités Interdites

Conformément aux réglementations UEMOA/BCEAO, l'utilisation pour des paris clandestins, contrefaçons, escroqueries, systèmes pyramidaux ou stupéfiants est formellement prohibée sous peine de clôture immédiate.