Valider les achats depuis votre backend
Section intitulée « Valider les achats depuis votre backend »Le suivi sur votre page ou votre application signale à Frak qu’une commande se prépare. Les récompenses ne sont déclenchées que lorsque votre backend confirme que la commande est réelle à l’aide d’un webhook signé. Cela garantit que les récompenses restent liées à des ventes réelles et payées.
Cette étape est la même, que votre front-end soit un site web ou une application mobile.
Comment ça marche
Section intitulée « Comment ça marche »-
Le front-end enregistre la commande. La carte post-achat,
trackPurchaseStatusou l’appel d’achat du SDK mobile envoiecustomerId,orderIdettokenpour que Frak commence à écouter cette commande. -
Votre backend la confirme. Lorsque la commande est payée (ou remboursée, annulée), votre serveur envoie un webhook à Frak avec les mêmes identifiants et une signature HMAC.
-
Frak déclenche la récompense. Une fois la signature vérifiée et le statut égal à
confirmed, Frak envoie l’interactionPurchaseCompleted, qui permet de verser des récompenses en fonction de vos campagnes actives.
Envoyer le webhook
Section intitulée « Envoyer le webhook »Votre URL de webhook et votre clé secrète de signature se trouvent dans le tableau de bord professionnel, dans la section Purchase Tracker de votre espace marchand. Signez l’ensemble du corps de la requête avec HMAC SHA-256 et envoyez-le dans l’en-tête x-hmac-sha256.
import crypto from "node:crypto";
async function sendPurchaseWebhook(order: { id: string; customerId: string; status: "pending" | "confirmed" | "cancelled" | "refunded"; token: string; currency?: string; totalPrice?: string;}) { const body = JSON.stringify(order); const hmac = crypto .createHmac("sha256", process.env.FRAK_WEBHOOK_SECRET) .update(body) .digest("hex");
await fetch(process.env.FRAK_WEBHOOK_URL, { method: "POST", headers: { "Content-Type": "application/json", "x-hmac-sha256": hmac, // Use "true" while testing, "false" in production "x-test": "false", }, body, });}
await sendPurchaseWebhook({ id: "order_456", customerId: "cust_123", status: "confirmed", token: "a-unique-order-token", currency: "EUR", totalPrice: "99.99",});function sendPurchaseWebhook(array $order): void { $url = getenv('FRAK_WEBHOOK_URL'); $secret = getenv('FRAK_WEBHOOK_SECRET');
$body = json_encode($order); $hmac = hash_hmac('sha256', $body, $secret);
$ch = curl_init($url); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_POSTFIELDS => $body, CURLOPT_HTTPHEADER => [ 'Content-Type: application/json', 'x-hmac-sha256: ' . $hmac, 'x-test: false', // "true" while testing ], ]); curl_exec($ch); curl_close($ch);}
sendPurchaseWebhook([ 'id' => 'order_456', 'customerId' => 'cust_123', 'status' => 'confirmed', 'token' => 'a-unique-order-token', 'currency' => 'EUR', 'totalPrice' => '99.99',]);Consultez la référence du webhook d’achat pour voir la charge utile complète (y compris les articles de la commande) et l’endpoint de suivi des achats pour l’appel côté page.