đŸ‡«đŸ‡·
Developper
DashboardGithubWebsite
French
French
  • 👋Bienvenue
  • Introduction
    • 🔐Authentication
    • 📃Format des rĂ©ponses
    • ⚠Erreurs
    • 🧙Test
    • đŸȘWebhooks
  • Payments
    • 💰Initialiser un paiement
    • 🔁IntĂ©gration Standard
    • 😎VĂ©rifier un paiement
    • 🔎Retrouver un paiement
    • ✋Statut
    • 🌍MĂ©thodes Disponibles
    • 🧙Tests
  • Payouts
    • 💾Initialiser un transfert
    • 😎VĂ©rifier un transfert
    • 🔎RĂ©cupĂ©rer un transfert
    • ✋Statut du transfert
    • 🌍MĂ©thodes Disponibles
    • 🧙Tests
  • SDKs
    • 🐘PHP SDK
    • ⚡Laravel SDK
  • Integrations
    • 🛒WooCommerce
Powered by GitBook
On this page
  • Introduction
  • Types d'Ă©vĂ©nements
  • Structure du Webhook
  • Configuration
  • RĂ©ception d'un Webhook
  • VĂ©rification d'un Webhook
  • Exemples
  • Bonnes Pratiques de Webhook

Was this helpful?

  1. Introduction

Webhooks

PreviousTestNextInitialiser un paiement

Last updated 11 months ago

Was this helpful?

Les Webhooks sont conçus pour communiquer des mises à jour d'état en temps réel, telles que des notifications de paiement réussi. Il s'agit essentiellement d'URL que Moneroo appelle pour fournir l'ID d'un objet mis à jour. DÚs réception de l'appel, vous devez récupérer le dernier statut et le traiter s'il y a eu des changements.


Introduction

Moneroo peut envoyer des Webhooks pour alerter votre application chaque fois qu'un Ă©vĂ©nement se produit sur votre compte. Ceci est particuliĂšrement utile pour les Ă©vĂ©nements tels que les transactions Ă©chouĂ©es ou rĂ©ussies. Ce mĂ©canisme est Ă©galement utile pour les services qui ne sont pas directement responsables de la crĂ©ation d'une requĂȘte d'API, mais qui ont besoin de la rĂ©ponse Ă  cette requĂȘte. Vous pouvez spĂ©cifier les URLs du Webhook oĂč vous souhaitez ĂȘtre notifiĂ©.

Lorsqu'un Ă©vĂ©nement se produit, Moneroo vous envoie un objet contenant tous les dĂ©tails de l'Ă©vĂ©nement via une requĂȘte HTTP POST aux URLs dĂ©finies.

Types d'événements

Voici les événements que nous déclenchons actuellement.

D'autres seront ajoutés au fur et à mesure que nous étendrons nos actions à l'avenir.

ÉvĂ©nements de paiement

Type d'événement
Description

payment.initiated

Déclenché lorsqu'un nouveau paiement est initié.

payment.success

Déclenché lorsqu'un paiement se termine avec succÚs.

payment.failed

Déclenché lorsqu'un paiement échoue.

payment.cancelled

Déclenché lorsqu'un paiement est annulé.

ÉvĂ©nements de transfert

Type d'événement
Description

payout.initiated

Déclenché lorsqu'un transfert est initié.

payout.success

Déclenché lorsqu'un transfert se termine avec succÚs.

payout.failed

Déclenché lorsqu'un transfert échoue.

Vous pouvez utiliser ces types d'événements dans votre application pour déclencher des actions spécifiques lorsque Moneroo émet ces événements.

Structure du Webhook

Tous les contenus des Webhooks suivent une structure de base cohérente, comprenant deux éléments principaux :

  • Event : Le type d'Ă©vĂ©nement qui s'est produit.

  • Data : Les donnĂ©es associĂ©es Ă  l'Ă©vĂ©nement. Le contenu de cet objet varie en fonction de l'Ă©vĂ©nement, mais il contient gĂ©nĂ©ralement les dĂ©tails de l'Ă©vĂ©nement, y compris :

    • un id contenant l'ID de la transaction.

    • un status, dĂ©crivant l'Ă©tat du paiement de la transaction, le paiement ou les dĂ©tails du client, le cas Ă©chĂ©ant.

Exemple

Nous ne fournissons pas d'informations complĂštes par le biais du Webhook, vous devrez donc rĂ©cupĂ©rer le dernier statut de l'objet par une requĂȘte pour retrouver un paiement/payout.

{
  "event": "payment.success",
  "data": {
    "id": "123456",
    "amount": 100,
    "currency": "USD",
    "status": "success",
    "customer": {
      "id": "123456",
      "email": "hello@example.com",
      "firstName": "John",
      "lastName": "Doe",
      "phone": "+1 555 555 5555"
    }
  }
}

Configuration

Pour configurer les Webhooks, naviguez dans le tableau de bord de votre application, accédez à la section Développeurs et cliquez sur l'onglet Webhooks.

Vous pouvez ajouter un nouveau Webhook en cliquant sur le bouton Ajouter un Webhook et en remplissant le formulaire avec les détails suivants :

  • URL : L'URL du Webhook.

  • Secret : La clĂ© secrĂšte utilisĂ©e pour signer la charge utile du Webhook.

  • La clĂ© secrĂšte est utilisĂ©e pour signer le Webhook, ce qui vous permet de vĂ©rifier que le Webhook provient rĂ©ellement de Moneroo.

  • Vous pouvez ajouter un maximum de 15 Webhooks par application.

Vous pouvez également activer, désactiver ou supprimer un Webhook existant en cliquant sur les boutons correspondants.

Le Webhook est envoyĂ© sous la forme d'une requĂȘte POST Ă  l'URL que vous avez spĂ©cifiĂ©e. Le corps de la requĂȘte contient du JSON et des informations sur l'Ă©vĂ©nement qui s'est produit. Assurez-vous que votre point d'accĂšs peut accepter les requĂȘtes POST et analyser les donnĂ©es utiles JSON.

Réception d'un Webhook

Lorsque Moneroo envoie un Webhook à votre URL, il inclut un corps en format JSON détaillant l'événement.

Par exemple, voici un corps de réponse pour l'événement payment.success⁣ :

{
  "event": "payment.success",
  "data": {
    "id": "123456",
    "amount": 100,
    "currency": "USD",
    "status": "success"
  }
}

Vous pouvez utiliser le champ event dans le contenu de la requĂȘte pour dĂ©terminer l'action que votre application doit entreprendre.

Pour accuser rĂ©ception d'un Webhook, votre point d'accĂšs doit renvoyer un code d'Ă©tat HTTP 200. Tout autre code de rĂ©ponse, y compris les codes 3xx, sera considĂ©rĂ© comme un Ă©chec. Nous ne tenons pas compte du corps de la rĂ©ponse ni des en-tĂȘtes.

Si votre point d'accĂšs ne renvoie pas un code d'Ă©tat HTTP 200 ou ne rĂ©pond pas dans les 3 secondes, nous rĂ©essayerons le Webhook jusqu'Ă  3 fois avec un dĂ©lai de 10 minutes entre chaque tentative.Les frameworks web tels que Rails, Laravel ou Django vĂ©rifient gĂ©nĂ©ralement que chaque requĂȘte POST contient un jeton CSRF.

Bien qu'il s'agisse d'une fonctionnalitĂ© de sĂ©curitĂ© utile contre la falsification des requĂȘtes intersites, vous devrez exempter le point de terminaison du Webhook de la protection CSRF pour garantir le fonctionnement du Webhook.

Vérification d'un Webhook

Lorsque vous recevez un Webhook, vous devez en vĂ©rifier l'origine. Chaque demande de Webhook comprend un en-tĂȘte X-Moneroo-Signature. La valeur de cet en-tĂȘte est une signature gĂ©nĂ©rĂ©e Ă  l'aide du secret de signature de votre Webhook et du corps du Webhook.

Pour vĂ©rifier la signature, vous devez calculer la signature de votre cĂŽtĂ© et la comparer Ă  la valeur de l'en-tĂȘte X-Moneroo-Signature.

La signature est calculée en utilisant HMAC-SHA256 avec le secret de signature du Webhook comme clé et le corps comme valeur.

Si la signature est valide, la rĂ©ponse doit ĂȘtre un code d'Ă©tat 200 OK. Si elle n'est pas valide, la rĂ©ponse doit ĂȘtre 403 Forbidden.

Exemples

Veuillez remplacer 'your_webhook_signing_secret', 'your_payload' et 'header_value' par vos valeurs rĂ©elles. Pour les exemples en Node.js, Java et Go, vous devez obtenir le corps de la requĂȘte et la valeur de l'en-tĂȘte Ă  partir de votre objet de requĂȘte HTTP.

<?php
$secret = 'your_webhook_signing_secret';
$payload = file_get_contents('php://input');
$signature = hash_hmac('sha256', $payload, $secret);

if (hash_equals($signature, $_SERVER['HTTP_X_MONEROO_SIGNATURE'])) {
    http_response_code(200);
} else {
    http_response_code(403);
}
?>
const crypto = require("crypto");
const secret = "your_webhook_signing_secret";
const payload = req.body;
const signature = crypto
  .createHmac("sha256", secret)
  .update(JSON.stringify(payload))
  .digest("hex");

if (signature === req.headers["x-moneroo-signature"]) {
  res.sendStatus(200);
} else {
  res.sendStatus(403);
}
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;

// Your secret key
String secret = "your_webhook_signing_secret";
String payload = "your_payload";
String XMonerooSignature = "header_value";

Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
SecretKeySpec secret_key = new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
sha256_HMAC.init(secret_key);

String computedSignature = new String(sha256_HMAC.doFinal(payload.getBytes(StandardCharsets.UTF_8)));
if (computedSignature.equals(XMonerooSignature)) {
    System.out.println("200 OK");
} else {
    System.out.println("403 Forbidden");
}
import hashlib
import hmac

secret = 'your_webhook_signing_secret'
payload = 'your_payload'
XMonerooSignature = 'header_value'

computed_signature = hmac.new(secret.encode(), msg=payload.encode(), digestmod=hashlib.sha256).hexdigest()

if computed_signature == XMonerooSignature:
    print("200 OK")
else:
    print("403 Forbidden")
package main

import (
    "crypto/hmac"
    "crypto/sha256"
    "encoding/hex"
    "fmt"
)

func main() {
    secret := "your_webhook_signing_secret"
    payload := []byte("your_payload")
    XMonerooSignature := "header_value"

    h := hmac.New(sha256.New, []byte(secret))
    h.Write(payload)
    computedSignature := hex.EncodeToString(h.Sum(nil))

    if computedSignature == XMonerooSignature {
        fmt.Println("200 OK")
    } else {
        fmt.Println("403 Forbidden")
    }
}

Bonnes Pratiques de Webhook

  • Ne vous fiez pas uniquement aux Webhooks : Veillez Ă  disposer d'une stratĂ©gie de sauvegarde, telle qu'une tĂąche d'arriĂšre-plan qui vĂ©rifie Ă  intervalles rĂ©guliers l'Ă©tat des transactions en attente. Cela peut s'avĂ©rer utile en cas de dĂ©faillance de votre point d'accĂšs au Webhook.

  • Utilisez un hachage secret : L'URL de votre Webhook est publique, n'importe qui peut envoyer une fausse charge utile. Nous recommandons d'utiliser un hachage secret pour authentifier les demandes.

  • Toujours rĂ©interroger : VĂ©rifiez les dĂ©tails reçus avec notre API pour garantir l'intĂ©gritĂ© des donnĂ©es. Par exemple, lors de la rĂ©ception d'une notification de paiement rĂ©ussie, utilisez notre point de terminaison de vĂ©rification de transaction pour vĂ©rifier le statut de la transaction.

  • RĂ©pondre rapidement : Votre point d'accĂšs au Webhook doit rĂ©pondre dans un certain dĂ©lai pour Ă©viter les Ă©checs et les nouvelles tentatives. Évitez d'exĂ©cuter des tĂąches de longue haleine dans votre point de terminaison du Webhook afin d'Ă©viter les dĂ©passements de dĂ©lai. RĂ©pondez immĂ©diatement avec un code d'Ă©tat 200, puis exĂ©cutez toutes les tĂąches longues de maniĂšre asynchrone.

  • GĂ©rer les doublons : Dans certains cas, les Webhooks peuvent ĂȘtre transmis plusieurs fois. Par exemple, si nous ne recevons pas de rĂ©ponse de votre point d'accĂšs, nous relançons le Webhook. Assurez-vous que votre point d'accĂšs peut gĂ©rer des notifications de Webhooks en double.

  • GĂ©rer les Ă©checs : En cas d'Ă©chec de votre point de terminaison, nous rĂ©essayerons le Webhook jusqu'Ă  trois fois, avec un dĂ©lai de 10 minutes entre chaque tentative. Si toutes les tentatives Ă©chouent, nous cessons d'essayer et marquons le Webhook comme ayant Ă©chouĂ©. Vous pouvez consulter les Webhooks qui ont Ă©chouĂ© dans votre tableau de bord.

đŸȘ
Moneroo.io Webhook