Weryfikowanie odpowiedzi użytkownika

Na tej stronie wyjaśniamy, jak zweryfikować odpowiedź użytkownika na test reCAPTCHA z backendu aplikacji.

W przypadku użytkowników korzystających z wersji internetowej możesz uzyskać token odpowiedzi użytkownika na 3 sposoby:

  • g-recaptcha-response parametr POST, gdy użytkownik prześle formularz w Twojej witrynie.
  • grecaptcha.getResponse(opt_widget_id) po wykonaniu przez użytkownika zadania reCAPTCHA
  • Jako argument ciągu znaków w funkcji wywołania zwrotnego, jeśli data-callback jest określony w atrybutach tagu g-recaptcha lub w parametrze wywołania zwrotnego w metodie grecaptcha.render.

W przypadku użytkowników biblioteki na Androida możesz wywołać metodę SafetyNetApi.RecaptchaTokenResult.getTokenResult(), aby uzyskać token odpowiedzi, jeśli stan zwróci wartość „successful” (udane).

Ograniczenia dotyczące tokenów

Każdy token odpowiedzi użytkownika reCAPTCHA jest ważny przez 2 minuty i może zostać zweryfikowany tylko raz, aby zapobiec atakom polegającym na odtwarzaniu. Jeśli potrzebujesz nowego tokena, możesz ponownie uruchomić weryfikację reCAPTCHA.

Po otrzymaniu tokena odpowiedzi musisz go w ciągu 2 minut zweryfikować za pomocą reCAPTCHA, korzystając z tego interfejsu API. Dzięki temu upewnisz się, że token jest prawidłowy.

Żądanie do interfejsu API

Adres URL: https://www.google.com/recaptcha/api/siteverify

METODA: POST

Parametr POST Opis
secret Wymagane. Klucz wspólny dla Twojej witryny i reCAPTCHA.
response Wymagane. Token odpowiedzi użytkownika udostępniany przez integrację po stronie klienta reCAPTCHA w Twojej witrynie.
remoteip Opcjonalnie: Adres IP użytkownika.

Odpowiedź interfejsu API

Odpowiedź to obiekt JSON:

{
  "success": true|false,
  "challenge_ts": timestamp,  // timestamp of the challenge load (ISO format yyyy-MM-dd'T'HH:mm:ssZZ)
  "hostname": string,         // the hostname of the site where the reCAPTCHA was solved
  "error-codes": [...]        // optional
}

W przypadku reCAPTCHA na Androida:

{
  "success": true|false,
  "challenge_ts": timestamp,  // timestamp of the challenge load (ISO format yyyy-MM-dd'T'HH:mm:ssZZ)
  "apk_package_name": string, // the package name of the app where the reCAPTCHA was solved
  "error-codes": [...]        // optional
}

Odwołania do kodu błędu

Kod błędu Opis
missing-input-secret Brakuje parametru tajnego.
invalid-input-secret Parametr tajny jest nieprawidłowy lub błędnie sformatowany.
missing-input-response Brak parametru odpowiedzi.
invalid-input-response Parametr odpowiedzi jest nieprawidłowy lub źle sformułowany.
bad-request Żądanie jest nieprawidłowe lub ma nieprawidłowy format.
timeout-or-duplicate Odpowiedź jest już nieważna: jest zbyt stara lub została już użyta.