Aller au contenu

Pour un site personnalisé, l’intégration de Frak se fait en deux étapes :

  1. Ajoutez les composants Frak à votre site. Chargez Frak, définissez un objet de configuration et intégrez le bouton de partage, la bannière d’accueil ainsi que la carte post-achat. Choisissez ci-dessous la configuration qui correspond à votre environnement.
  2. Validez les achats depuis votre backend. Confirmez les commandes réelles avec un webhook signé pour que les récompenses ne soient attribuées que lors de ventes authentiques.

Ces trois composants sont des composants web indépendants de tout framework. Ils fonctionnent donc de la même manière que vous écriviez du HTML brut, utilisiez un bundler ou construisiez votre site avec React.

ComposantEmplacementAction
<frak-button-share>Page produit, page d’accueilPermet aux clients de partager votre boutique et de gagner des récompenses
<frak-banner>Haut de la pageAccueille les visiteurs parrainés
<frak-post-purchase>Page de confirmation de commandePropose un partage juste après le paiement et suit la commande

Ajoutez ceci dans le <head> de vos pages. L’objet de configuration est lu par Frak lors de son chargement, définissez-le donc avant la balise script.

index.html
<head>
<!-- 1. Configure Frak (domain defaults to the current host) -->
<script>
window.FrakSetup = {
config: {
metadata: {
name: "Your Store",
currency: "eur",
},
},
};
</script>
<!-- 2. Avoid a flash of unstyled elements while the script loads -->
<style>
frak-button-share:not(:defined),
frak-banner:not(:defined),
frak-post-purchase:not(:defined) { display: none !important; }
</style>
<!-- 3. Load the components (auto-registers them and boots the SDK) -->
<script
type="module"
src="https://cdn.jsdelivr.net/npm/@frak-labs/components@latest"
defer="defer"
></script>
</head>

Placez la bannière près du haut de votre <body>, et le bouton de partage là où vous souhaitez que vos clients partagent :

<body>
<!-- Welcomes referred visitors -->
<frak-banner></frak-banner>
<!-- Inherits your theme's .button styles via classname -->
<frak-button-share classname="button"></frak-button-share>
</body>

Sur votre page de confirmation de commande, ajoutez la carte post-achat avec les détails de votre commande. Lorsque customer-id, order-id et token sont tous présents, la carte enregistre également la commande automatiquement auprès de Frak :

<frak-post-purchase
customer-id="cust_123"
order-id="order_456"
token="a-unique-order-token"
></frak-post-purchase>

Si vous ne souhaitez pas afficher la carte, enregistrez plutôt la commande directement. L’action devient disponible dès que Frak est prêt :

<script>
window.addEventListener("frak:client", () => {
window.FrakSetup.core.trackPurchaseStatus({
customerId: "cust_123",
orderId: "order_456",
token: "a-unique-order-token",
});
});
</script>

Le suivi sur la page indique à Frak qu’une commande pourrait être en cours. 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 permet de garantir que les récompenses sont associées à des ventes réelles et payées.

  1. La page enregistre la commande. La carte post-achat (ou trackPurchaseStatus) envoie customerId, orderId et token pour que Frak commence à écouter cette commande.

  2. 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.

  3. Frak déclenche la récompense. Dès que la signature est validée et que le statut est confirmed, Frak envoie l’interaction PurchaseCompleted, ce qui permet de verser des récompenses en fonction de vos campagnes actives.

Votre URL de webhook et votre secret de signature se trouvent dans le tableau de bord business, dans la section Suivi des achats de votre espace marchand. Signez l’intégralité du corps de la requête avec HMAC SHA-256 et envoyez-la 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",
});

Consultez la référence du webhook d’achat pour obtenir la charge utile complète (y compris les articles de la commande) et l’endpoint suivi d’achat pour l’appel côté page.