logo
bars

TenDI (Tencent) CAPTCHA
et CapMonster Cloud

Résolution de captchas, intégration sur le site et tests.
Vous avez hérité d’un site doté d’une captcha ou d’une autre couche de protection mais sans accès au code source ? Il est alors naturel de se demander quelle solution est installée, si elle est correctement configurée et comment la tester.

Dans cet article, nous avons essayé de répondre à toutes les questions essentielles. Pour commencer à résoudre le problème, il faut d’abord déterminer quel système de protection est utilisé. Pour cela, vous pouvez consulter la liste des captchas et systèmes de protection antibot les plus populaires, qui présente des exemples visuels et des caractéristiques clés permettant d’identifier rapidement avec quoi vous avez affaire.

Si vous constatez que votre site utilise TenDI (Tencent), l’étape suivante consiste à étudier plus en détail ses propriétés et son fonctionnement. Dans cet article, vous pouvez également consulter le guide d’intégration de TenDI (Tencent) afin de comprendre pleinement la façon dont il fonctionne sur votre site. Cela vous permettra non seulement de mieux connaître la protection en place, mais aussi de planifier correctement sa maintenance.

Qu'est-ce que TenDI CAPTCHA
Qu'est-ce que TenDI CAPTCHA
TenDI (Tencent) CAPTCHA est un système de protection anti-bot à plusieurs niveaux. Grâce à l'analyse du comportement et à des mécanismes spécialisés, il détermine si un visiteur du site est un humain réel. Il est utilisé pour protéger les inscriptions, les connexions, les campagnes marketing, et prévenir le spam et le vol de données.
Background
Exemples de TenDI (Tencent)
Non-perception CAPTCHA
Non-perception CAPTCHA
La vérification se fait automatiquement sans intervention de l'utilisateur. Idéal pour les scénarios où l'expérience utilisateur est critique.
Slider CAPTCHA
Slider CAPTCHA
Vérification rapide et simple en déplaçant un curseur. Convient à la plupart des cas.
Graphic CAPTCHA
Graphic CAPTCHA
L'utilisateur clique successivement sur les éléments de l'image. Utilisé dans des scénarios à haute sécurité.
Audio CAPTCHA
Audio CAPTCHA
Vérification via enregistrement audio. Optimal pour les utilisateurs ayant des limitations.
Smart Verification
Smart Verification
Le système évalue le comportement de l'utilisateur : les utilisateurs fiables passent immédiatement, les suspects sont vérifiés plus en détail.
Multi-dimensional Defense
Multi-dimensional Defense
Plusieurs mécanismes de protection sont utilisés : chiffrement dynamique, anti-bot, et autres.

Comment résoudre Tencent CAPTCHA avec CapMonster Cloud

Lors du test de formulaires avec Tencent CAPTCHA, il est souvent nécessaire de vérifier que le captcha fonctionne correctement et est bien intégré.
Vous pouvez tester manuellement le captcha intégré sur votre site :
  • Ouvrez la page contenant le formulaire et assurez-vous que le captcha est affiché.
  • Essayez de soumettre le formulaire sans résoudre le captcha — le serveur doit renvoyer une erreur.
  • Après avoir résolu correctement le captcha, le formulaire doit être soumis sans erreur.
Pour la reconnaissance automatique du captcha, vous pouvez utiliser des services spécialisés tels que CapMonster Cloud, un outil qui reçoit les paramètres du captcha, les traite sur ses serveurs et renvoie un jeton prêt à l'emploi. Ce jeton peut être inséré dans le formulaire pour passer la vérification sans intervention de l'utilisateur.

Travailler avec CapMonster Cloud via l’API comprend généralement les étapes suivantes :

Création de la tâcheCréation de la tâche
arrow
Envoyer une requête APIEnvoyer une requête API
arrow
Réception du résultatRéception du résultat
arrow
Insertion du jeton sur la pageInsertion du jeton sur la page
arrow
Reconnaissance de TenDI (Tencent) CAPTCHA avec des bibliothèques prêtes à l'emploi
CapMonster Cloud fournit des bibliothèques prêtes à l'emploi pour une intégration facile en Python, JavaScript (Node.js) et C#.
Python
JavaScript
C#
Résolution, insertion du jeton et soumission du formulaire
Exemple Node.js pour le cycle complet de résolution de captcha sur votre page web. Approches possibles : utiliser des requêtes HTTP pour récupérer le HTML et les paramètres de protection, envoyer la réponse et traiter le résultat. Ou, comme dans l'exemple ci-dessous, utiliser des outils d'automatisation (ex : Playwright) — ouvrir la page, attendre la vérification, envoyer les paramètres via le client CapMonster Cloud, recevoir le résultat, injecter le jeton dans le formulaire (pour les tests, vous pouvez utiliser des données correctes ou incorrectes) et observer le résultat.

// npx playwright install chromium

import { chromium } from 'playwright';
import { CapMonsterCloudClientFactory, ClientOptions, TenDIRequest } from '@zennolab_com/capmonstercloud-client';

// Remplacez par vos propres valeurs
const API_KEY = "YOUR_API_KEY";         
const WEBSITE_URL = "https://example.com";

async function solveTenDIOnPage() {
    const browser = await chromium.launch({ headless: false });
    const context = await browser.newContext();
    const page = await context.newPage();

    // 1. Ouvrir la page
    await page.goto(WEBSITE_URL, { waitUntil: 'networkidle' });

    // 2. Attendre l'apparition du captcha (ex : input ou iframe)
    await page.waitForSelector('#tendi_response, iframe[src*="tendi"], input[name="tendi_response"]', { timeout: 15000 });

    // Si nécessaire, le websiteKey peut être extrait directement de la page
    const WEBSITE_KEY = await page.evaluate(() => {
        // Exemple : le sitekey peut se trouver dans un attribut data ou une variable globale
        const el = document.querySelector('#tendi_response') || document.querySelector('div[data-sitekey]');
        return el?.getAttribute('data-sitekey') || window.TenDI_siteKey || "183268248";
    });

    console.log("Website key detected:", WEBSITE_KEY);

    const client = CapMonsterCloudClientFactory.Create(
        new ClientOptions({ clientKey: API_KEY })
    );

    // 3. Créer une tâche TenDI
    const tenDIRequest = new TenDIRequest({
        websiteURL: page.url(),
        websiteKey: WEBSITE_KEY,
    });

    const balance = await client.getBalance();
    console.log("Balance:", balance);

    // 4. Résoudre le captcha
    const solution = await client.Solve(tenDIRequest);
    console.log("Solution:", solution);

    const { ticket, randstr } = solution.solution.data;

    // 5. Moyens d'injecter le résultat
    await page.evaluate(({ ticket, randstr }) => {
        // Injection dans un champ input
        const inputSelectors = ['#tendi_response', 'input[name="tendi_response"]', 'input[type="hidden"]'];
        let inserted = false;
        for (const sel of inputSelectors) {
            const input = document.querySelector(sel);
            if (input) {
                input.value = ticket;
                input.dispatchEvent(new Event('input', { bubbles: true }));
                const form = input.closest('form');
                if (form) form.submit();
                inserted = true;
                break;
            }
        }

        // Fonction callback JS
        if (typeof window.onCaptchaSolved === 'function') {
            window.onCaptchaSolved(ticket, randstr);
            inserted = true;
        }

        // Si aucun input et aucun callback
        if (!inserted) {
            window._tenDITicket = ticket;
            window._tenDIRandStr = randstr;
            console.log("Ticket and randstr saved to window._tenDITicket and window._tenDIRandStr");
        }
    }, { ticket, randstr });

    await page.waitForTimeout(5000);
    await browser.close();
}

solveTenDIOnPage().catch(console.error);
  
Comment intégrer TenDI (Tencent) CAPTCHA à votre site
Pour comprendre le fonctionnement du captcha sur votre site, la logique de vérification, le réintégrer ou le reconfigurer, nous vous recommandons de lire cette section. Elle décrit le processus complet d'intégration et aide à comprendre tous les détails rapidement.
  • 1. Connectez-vous à votre compte ou créez-en un nouveau dans la Captcha Console.
  • 2. Ouvrez la section Verification Management.
  • 3. Créez un nouveau captcha (si inexistant).

Vous recevrez deux paramètres : CaptchaAppId et AppSecretKey. Ils sont utilisés côté frontend et serveur.

Exemple d'intégration frontendExemple d'intégration frontend
arrow

Comment fonctionne l'intégration

Étape 1 : Charger le JavaScript du captcha

Le script doit être chargé dynamiquement :

<script src="https://ca.turing.captcha.qcloud.com/TJNCaptcha-global.js"></script>

Si le script est chargé de manière non standard ou mis en cache, le captcha peut mal fonctionner.

Étape 2 : Créer un objet TencentCaptcha

Après le chargement du JS, une classe globale devient disponible :

<script src="new TencentCaptcha(domElement, CaptchaAppId, callback, options);"></script>

Paramètres :

domElement - Conteneur où le checkbox/iframe est intégré

CaptchaAppId - Votre ID

callback - Action après vérification

options - Paramètres visuels (optionnel)

Étape 3 : Appeler la méthode .show()

captcha.show();

Affiche le captcha. Peut être appelé plusieurs fois.

Étape 4 : Traiter le résultat

Le callback reçoit un objet :


{
  ret: 0,              // 0 -- succès, 2 -- l'utilisateur a fermé la fenêtre
  ticket: "...",       // requis par le serveur
  randstr: "...",      // également requis par le serveur
  errorCode: 1001,     // si le captcha n'a pas chargé
  errorMessage: "..."  // message d'erreur
}

Sur le serveur, une vérification secondaire du ticket est obligatoire.

Mode "Disaster Recovery"

Si le captcha ne charge pas (ex : CDN indisponible), un ticket d'urgence peut être généré automatiquement pour ne pas interrompre le processus métier.

Scénario :

  • Tentative de créer un captcha → erreur.
  • Appeler loadErrorCallback().
  • Générer un ticket du type :
    trerror_<errorcode>_<appid>_<timestamp>
  • Continuer le traitement normalement, mais le serveur reconnaît qu'il s'agit d'un ticket d'urgence et décide quoi faire.

Chiffrement de l'AppId (optionnel)

Pour une protection maximale, vous pouvez transmettre une version chiffrée de l'AppId au captcha au lieu de la version ouverte :

aidEncrypted = Base64(IV + AES256(AppId & timestamp & ttl))

Nécessaire :

  • Clé de 32 octets (AppSecretKey → complétée jusqu'à 32 octets)
  • AES-256 CBC + PKCS7Padding
  • IV de 16 octets
  • timestamp et durée de validité en secondes

Exemple de chiffrement côté serveur (Python)


from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
import base64

def encrypt(plaintext, key, iv):
    cipher = AES.new(key, AES.MODE_CBC, iv)
    ciphertext = cipher.encrypt(pad(plaintext.encode(), AES.block_size))
    return base64.b64encode(iv + ciphertext).decode("utf-8")

Validation côté serveur

Étape 1. Configurer l'accès à l'API

Dans le panneau de gestion des clés (CAM / API Key Management), obtenez SecretId et SecretKey pour l'API. Ces clés sont nécessaires pour les requêtes signées.

Étape 2. Appeler l'API DescribeCaptchaResult

Après que le client a renvoyé ticket et randstr, le serveur doit envoyer la requête suivante :

  • Action: DescribeCaptchaResult
  • Version: 2019-07-22 (ou la version actuelle)

Paramètres :

CaptchaType - 9 (valeur fixe)

Ticket - chaîne — ticket renvoyé par le client

Randstr - chaîne — randstr renvoyé par le client

CaptchaAppId - votre AppId

AppSecretKey - votre clé secrète

UserIp - IP de l'utilisateur (recommandé)

Étape 3. Traiter la réponse

L'API renvoie :

  • CaptchaCode: integerle résultat de la vérification.
  • 0 (ou OK) — captcha réussie, ticket valide

Si CaptchaCode === OK, l'utilisateur est considéré comme vérifié. Sinon, rejeter.

Exemple — vérification du ticket en Node.js


import { v20190722 as captcha } from "@tencentcloud/tencentcloud-sdk-nodejs";
const client = new captcha.Client({
  credential: {
    secretId: "YOUR_SECRET_ID",
    secretKey: "YOUR_SECRET_KEY"
  },
  region: "ap-project", // région, si nécessaire
});

async function verifyCaptcha(ticket, randstr, userIp) {
  const params = {
    CaptchaType: 9,
    Ticket: ticket,
    Randstr: randstr,
    CaptchaAppId: YOUR_APP_ID,
    AppSecretKey: "YOUR_APP_SECRET_KEY",
    UserIp: userIp
  };

  const resp = await client.DescribeCaptchaResult(params);
  const code = resp.Response.CaptchaCode;
  return code === 0;
}
HelpIcon

Vous pouvez trouver plus d'informations sur l'intégration de Tencent CAPTCHA sur votre site dans la documentation officielle.

Background
Erreurs possibles et débogage
Bug Icon
Captcha ne se charge pas
(Erreurs 1001, 1002 ou message de signature invalide) — la cause peut être des paramètres de requête incorrects. Assurez-vous que CaptchaAppId, AppSecretKey et tous les paramètres de la requête sont correctement spécifiés.
Bug Icon
ticket/randstr invalide ou vide
Assurez-vous que le client transmet correctement les deux paramètres.
Bug Icon
Délai d'attente dépassé
Augmentez le temps d'attente côté serveur.
Tests de robustesse de la protection
Après l'intégration, il est important de vérifier que la protection fonctionne correctement.
Conseils de sécurité et d’optimisation
Stockez <b>AppSecretKey</b> uniquement sur le serveur, ne l'exposez pas dans le navigateur et ne l'incluez pas dans le code JS.
Consignez les réponses complètes de Tencent CAPTCHA, y compris les codes d'erreur, les temps de requête et les paramètres de validation — cela facilitera le diagnostic des problèmes.
Utilisez HTTPS lors de la transmission de tous les paramètres <b>(ticket, randstr)</b> pour éviter toute altération.
Placez sur la page des liens corrects vers la <b>Politique de confidentialité</b> et les <b>Conditions d'utilisation Tencent</b>, comme l'exige la licence.
Conclusion

Si vous avez récupéré un site avec un captcha ou un autre système de protection déjà installé, mais sans accès au code, pas de panique ! Il est assez simple d’identifier quelle technologie est utilisée. Pour vérifier que tout fonctionne correctement, vous pouvez utiliser le service de reconnaissance CapMonster Cloud dans un environnement de test isolé, afin de vous assurer que le mécanisme de traitement des jetons et la logique de vérification fonctionnent correctement.

Dans le cas de TenDI (Tencent), il suffit d’identifier le système, d’étudier son comportement et de vérifier que la protection fonctionne correctement. Dans cet article, nous avons montré comment reconnaître TenDI (Tencent) et où trouver les instructions pour son intégration ou sa reconfiguration, afin de maintenir la protection en toute confiance et de garder son fonctionnement sous contrôle.

Conclusion
Liens utiles
DocIconDocumentation TenDI (Tencent) CAPTCHADocIconDocumentation CapMonster Cloud (travail avec Tencent CAPTCHA)DocIconQu'est-ce que Tencent Captcha (TenDI) et comment la résoudre ?