Passer au contenu principal

Fingerprint et Google reCAPTCHA

Les systèmes Fingerprint et Google reCAPTCHA offrent une protection antifraude dans la nouvelle application checkout.

L’intégration de ces systèmes nécessite des étapes spécifiques détaillées ci-dessous.


Prérequis :

  • Assurez-vous d’utiliser un jeton Ventrata Checkout.

    Ce jeton est identique à votre identifiant Checkout. Il s’agit de jetons spécialisés conçus pour être publics et pouvant être utilisés en toute sécurité côté client pour effectuer des requêtes directement vers api.ventrata.com. Ils limitent l’utilisation de certains endpoints.

📒 REMARQUE

Si vous devez utiliser ces endpoints restreints, veuillez utiliser des jetons de connexion OCTO.


📒 REMARQUE

Tous les exemples utilisent JavaScript et des packages spécifiques à ce langage.

Étape 1 : Fingerprint

Les étapes suivantes décrivent le processus d’intégration :

1. Récupérer la configuration checkout

[Côté client] Appelez GET /ventrata/checkout/config pour récupérer l’objet de configuration checkout.

Assurez-vous d’utiliser la capability ventrata/checkout afin d’obtenir une réponse correcte.

fetch("https://api.ventrata.com/octo/ventrata/checkout/config", {
"headers": {
"authorization": "Bearer <YOUR_TOKEN_HERE>",
"octo-capabilities": "ventrata/checkout",
},
"method": "GET",
});

La réponse contient fingerprintPublicKey — votre clé API Fingerprint — qui peut être utilisée en toute sécurité côté client.

2. Installer l’agent Fingerprint

[Côté client] Installez le package Fingerprint Agent v4.

npm install @fingerprint/agent

‼️ IMPORTANT

À partir de Fingerprint v4, le script CDN/IIFE (<script src="...">) n’est plus pris en charge. Vous devez utiliser le package NPM ou un import ESM. Si vous chargiez auparavant Fingerprint via un script CDN, vous devez basculer vers le package NPM avant de continuer.

3. Initialiser l’agent

[Côté client] Initialisez l’agent une fois au chargement de la page en utilisant les valeurs issues de la configuration checkout :

import * as Fingerprint from "@fingerprint/agent";

const fpAgent = Fingerprint.start({
apiKey: fingerprintPublicKey, //from GET /ventrata/checkout/config
endpoints:[fingerprintEndpoint], // typically "https://checkout-api.ventrata.com/fp"
)}

4. Générer une empreinte Fingerprint

[Côté client] Avant de charger la page de paiement, appelez fpAgent.get() avec le fraudAssessment.id du paiement par carte de la commande.

//cardPayment is from GET /octo/orders/:id 
await fpAgent.get({ linkedId: cardPayment.fraudAssessment.id });

[Fingerprint] Fingerprint génère une empreinte de l’appareil et l’envoie directement à Ventrata via webhook.

[Côté client] Interrogez l’endpoint GET /orders/:id jusqu’à ce que :

cardPayments[n].fraudAssessment.fingerprintReceived === true


Politique de sécurité du contenu (CSP)

Si votre site utilise une Content Security Policy, ajoutez la directive suivante pour autoriser l’intégration Web Worker de Fingerprint :

script-src <your custom subdomain>;
connect-src <your custom subdomain>;
worker-src blob:;

Si cette configuration est absente, Fingerprint fonctionnera tout de même, mais avec une précision réduite.


Informations supplémentaires

Fingerprint transmet directement les signaux de l’appareil aux serveurs de Ventrata. Vous n’avez pas besoin de transférer de données manuellement.

📒 REMARQUE

Veuillez mettre en place des mécanismes de gestion d'erreurs robustes afin d’intercepter et de gérer les erreurs inconnues. Nous recommandons de suivre les bonnes pratiques générales de gestion des erreurs.

Différence principale entre v3 et v4

v3

(@fingerprintjs/fingerprintjs-
pro)

v4

(@fingerprint/agent)

Package

@fingerprintjs/fingerprintjs-pro

@fingerprint/agent

Méthode d’initialisation

FingerprintJS.load() — asynchrone, retourne une Promise

Fingerprint.start() — synchrone, retourne directement l’agent

Configuration de l’endpoint

endpoints: ["https://checkout-api.ventrata.com/fp"]
(tableau)

Pattern d’URL du script

scriptUrlPattern: "..."

Supprimé — inutile avec endpoint


Étape 2 : Google reCAPTCHA

Les étapes suivantes décrivent le processus d’intégration :

  1. [Côté client] Appelez GET /ventrata/checkout/config pour récupérer l’objet de configuration checkout.

    Assurez-vous d’utiliser la capability ventrata/checkout pour obtenir une réponse correcte.

    fetch("https://api.ventrata.com/octo/ventrata/checkout/config", {      
    "headers": {
    "authorization": "Bearer <YOUR_TOKEN_HERE>",
    "octo-capabilities": "ventrata/checkout",
    },
    "method": "GET",
    });

  2. [Côté client] Chargez le script JavaScript de reCAPTCHA globalement sur toutes les pages. Utilisez le recaptchaEnterpriseSiteKey à partir de l’objet de configuration récupéré à l’étape 1.

    <script src="https://www.recaptcha.net/recaptcha/enterprise.js?render={recaptchaEnterpriseSiteKey}">

  3. [Côté client] Exécutez régulièrement la génération de jetons en arrière-plan afin d’activer le traitement par apprentissage automatique de reCAPTCHA. Cette action doit être effectuée toutes les 10 secondes. Appelez la fonction grecaptcha.enterprise.execute avec le recaptchaEnterpriseSiteKey et action: CHECKOUT paramètres suivants. Voici un exemple de mise en œuvre :

    function recaptchaIntervalStart(recaptchaEnterpriseSiteKey: string) 
    {
    const intervalInSecs = 10;
    const milliseconds = 1000;
    recaptchaIntervalID = window.setInterval(() => {
    if (window.grecaptcha?.enterprise?.ready) {
    window.grecaptcha.enterprise.ready(async () => {
    try {
    window.grecaptcha.enterprise.execute(recaptchaEnterpriseSiteKey, {
    action: "CHECKOUT",
    });
    } catch (e) {
    console.error("reCAPTCHA interval failure", e);
    Sentry.captureException(e);
    }
    });
    }
    }, intervalInSecs * milliseconds);
    return recaptchaIntervalID;
    }
    ....
    ....
    recaptchaIntervalStart(recaptchaEnterpriseSiteKey) // e.g. on `DOMContentLoaded` event

  4. [Côté client] Après avoir reçu une empreinte valide, mettez à jour la commande avec un jeton reCAPTCHA généré par window.grecaptcha.enterprise.execute. Le jeton doit être généré, et la commande mise à jour, juste avant que l’utilisateur ne soit dirigé vers la passerelle de paiement.

    const reCatpchaOrder = await cartService.updateOrder(   
    orderForRecaptchaFlow.id,
    {
    currency: orderForRecaptchaFlow.pricing.currency,
    cardPayment: {
    fraudAssessment: {
    googleRecaptchaEnterprise: {
    token: recaptchaTokenFromExecuteFn,
    siteKey: recaptchaEnterpriseSiteKey,
    },
    },
    },
    },
    );



    📒 REMARQUE

    Répétez cette étape toutes les 60 secondes jusqu’à ce que la commande soit confirmée ou qu’une erreur critique empêche l’initialisation de la passerelle de paiement. Pendant ce processus, il est préférable d’arrêter la recaptchaIntervalStart de l’étape 3 afin d’éviter l’invalidation du jeton par Google. Une fois la commande mise à jour avec succès, reprenez la génération de jetons en arrière-plan.


  5. La commande sera automatiquement confirmée dès que le webhook d’autorisation sera reçu d’Adyen.

Avez-vous trouvé la réponse à votre question ?