FedaPay peut envoyer des webhooks qui notifient à votre application chaque fois qu'un événement se produit sur votre compte. Cela est particulièrement utile pour les événements tels que les transactions contestées ou réussites. Ce mécanisme est également utile pour les services qui ne sont pas directement responsables de la création d'une requête API, mais qui ont néanmoins besoin de connaître la réponse de cette requête.

Vous pouvez définir des URL Webhooks que nous utiliserons pour vous informer chaque fois qu'un événement se produit sur votre compte. Lorsque l'événement se produit comme par exemple un transaction approuvée, FedaPay crée un objet Event.

Cet objet Event contient toutes les informations pertinentes sur ce qui vient de se passer, y compris le type d'événement et les données associées à cet événement. FedaPay envoie ensuite l'objet Event via une requête HTTP POST à ​​toutes les URL de point de terminaison que vous avez définies dans les paramètres Webhooks de votre compte. Vous pouvez demander à FedaPay d'envoyer un seul événement à de nombreux points de terminaison de webhook.


Configurer les paramètres de vos webhooks

Les webhooks sont configurés dans la section Webhooks du tableau de bord.

Webhooks menu

Cliquez sur Créer un webhook ou Nouveau webhook pour afficher un formulaire dans lequel vous pouvez ajouter une nouvelle URL pour recevoir des webhooks. Vous pouvez entrer n'importe quelle URL comme destination pour les événements. Toutefois, il doit s'agir d'une page dédiée sur votre serveur configurée pour recevoir des notifications sur le web. Vous pouvez choisir d'être averti de tous les types d'événements, ou seulement de ceux spécifiques.

Webhooks creation_1
Webhooks creation_2
Terminez en cliquant sur Créer.

Une fois votre webhook créé, vous pouvez en consulter les détails, le modifier ou même le supprimer. Cliquez sur le webhook de votre choix et apportez les changements voulus.

Webhooks list
Webhooks details

Vérification des signatures Webhook

FedaPay signe les événements Webhook qu'il envoie à votre noeud final (Url par le quel FedaPay pourra joindre votre application). Nous le faisons en incluant une signature dans l’en-tête de chaque événement X-FEDAPAY-SIGNATURE. Cela vous permet de vérifier que les événements ont été envoyés par FedaPay et non par un tiers. Vous pouvez vérifier les signatures à l'aide de nos bibliothèques officielles ou manuellement à l'aide de votre propre solution.

Avant de pouvoir vérifier les signatures, vous devez récupérer la clé secrète de votre noeud final à partir des paramètres Webhooks de votre tableau de bord. Sélectionnez le webhook pour lequel vous souhaitez obtenir la clé secrète, puis cliquez sur le bouton "Copier la clé".

Chaque clé secrète est unique sur le noeud final auquel il correspond. Si vous utilisez le même noeud final pour les clés d'API test et active, notez que la clé secrète est différente pour chacun d'eux. Après cette configuration, FedaPay commence à signer chaque Webhook envoyé au noeud final.

Vérification des signatures à l'aide de nos bibliothèques officielles

Nous vous recommandons d'utiliser l'une de nos bibliothèques officielles pour vérifier les signatures. Vous effectuez la vérification en fournissant le contenu de l'événement, l'en-tête X-FEDAPAY-SIGNATURE et la clé secrète du noeud final. Si la vérification échoue, FedaPay renvoie une erreur.


// You can find your endpoint's secret in your webhook settings
$endpoint_secret = 'wh_dev.......';

$payload = @file_get_contents('php://input');
$sig_header = $_SERVER['HTTP_X_FEDAPAY_SIGNATURE'];
$event = null;

try {
    $event = \FedaPay\Webhook::constructEvent(
        $payload, $sig_header, $endpoint_secret
    );
} catch(\UnexpectedValueException $e) {
    // Invalid payload

    http_response_code(400);
    exit();
} catch(\FedaPay\Error\SignatureVerification $e) {
    // Invalid signature

    http_response_code(400);
    exit();
}

// Handle the event
switch ($event->name) {
    case 'transaction.created':
        // Transaction créée
        break;
    case 'transaction.approved':
        // Transaction approuvée
        break;
    case 'transaction.canceled':
        // Transaction annulée
        break;
    default:
        http_response_code(400);
        exit();
}

http_response_code(200);

// TODO