Cette documentation explique comment recevoir et vérifier les notifications de paiement envoyées par notre API.
Lorsqu’un paiement est validé, notre système envoie automatiquement une requête HTTP POST vers l’URL webhook configurée sur votre compte marchand.
Votre serveur doit :
200
POST
Headers envoyés
Content-Type: application/json
X-Signature: votre_signature_hmac
X-Timestamp: 1715350000
X-Event: payment.success
Structure des données envoyées
{
"event": "payment.success",
"data": {
"id": 15,
"order_no": "ORD-2026-001",
"uuid": "f8d7a2c1-xxxx-xxxx",
"account": "0700000000",
"subtotal": 1000,
"charge_percentage": 5,
"total": 1050,
"date": "2026-05-10 12:00:00"
}
}
Chaque requête est signée avec votre Client Secret.
La signature est générée avec :
HMAC SHA256
Formule utilisée
hash_hmac(
'sha256',
$timestamp . '.' . $jsonPayload,
$clientSecret
);
webhook.php<?php
// Votre Client Secret
$clientSecret = 'VOTRE_CLIENT_SECRET';
// Récupération du body brut
$payload = file_get_contents('php://input');
// Headers reçus
$receivedSignature = $_SERVER['HTTP_X_SIGNATURE'] ?? '';
$timestamp = $_SERVER['HTTP_X_TIMESTAMP'] ?? '';
// Génération de la signature locale
$computedSignature = hash_hmac(
'sha256',
$timestamp . '.' . $payload,
$clientSecret
);
// Vérification sécurisée
if (!hash_equals($computedSignature, $receivedSignature)) {
http_response_code(403);
echo json_encode([
'success' => false,
'message' => 'Invalid signature'
]);
exit;
}
// Conversion JSON
$data = json_decode($payload, true);
// Vérification de l'événement
if ($data['event'] === 'payment.success') {
$payment = $data['data'];
// Exemple :
// Mise à jour commande
// Validation paiement
// Livraison produit
// Crédit utilisateur
file_put_contents(
'payments.log',
json_encode($payment) . PHP_EOL,
FILE_APPEND
);
}
// Réponse obligatoire
http_response_code(200);
echo json_encode([
'success' => true
]);
© 2026 Moniapay | Tous droits réservés