Xác minh câu trả lời của người dùng
Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang
Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.
Trang này giải thích cách xác minh câu trả lời của người dùng cho thử thách reCAPTCHA từ ứng dụng của bạn
phần phụ trợ.
Đối với người dùng web, bạn có thể lấy mã thông báo phản hồi của người dùng theo một trong 3 cách sau:
- Tham số POST
g-recaptcha-response
khi người dùng gửi biểu mẫu trên trang web của bạn
grecaptcha.getResponse(opt_widget_id)
sau khi người dùng hoàn tất
thử thách reCAPTCHA
- Làm đối số chuỗi cho hàm callback của bạn
nếu
data-callback
được chỉ định trong thuộc tính thẻ g-recaptcha
hoặc
tham số gọi lại trong phương thức grecaptcha.render
Đối với người dùng thư viện Android, bạn có thể gọi hàm
SafetyNetApi.RecaptchaTokenResult.getTokenResult()
để nhận mã thông báo phản hồi nếu trạng thái trả về thành công.
Hạn chế về mã thông báo
Mỗi mã thông báo phản hồi của người dùng reCAPTCHA có hiệu lực trong 2 phút và chỉ có thể được xác minh một lần để ngăn chặn các cuộc tấn công phát lại. Nếu cần mã thông báo mới, bạn có thể chạy lại quy trình xác minh bằng reCAPTCHA.
Sau khi nhận được mã thông báo phản hồi, bạn cần xác minh mã đó trong vòng 2 phút bằng reCAPTCHA bằng cách sử dụng API sau đây để đảm bảo mã đó hợp lệ.
Yêu cầu API
URL: https://www.google.com/recaptcha/api/siteverify
PHƯƠNG PHÁP: POST
Tham số POST |
Mô tả |
secret |
Bắt buộc. Khoá dùng chung giữa trang web của bạn và reCAPTCHA. |
response |
Bắt buộc. Mã thông báo phản hồi của người dùng do tính năng tích hợp phía máy khách của reCAPTCHA cung cấp trên trang web của bạn. |
remoteip |
Không bắt buộc. Địa chỉ IP của người dùng. |
Phản hồi của API
Phản hồi là một đối tượng 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
}
Đối với reCAPTCHA cho Android:
{
"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
}
Tham chiếu mã lỗi
Mã lỗi |
Mô tả |
missing-input-secret |
Thiếu thông số bí mật. |
invalid-input-secret |
Tham số bí mật không hợp lệ hoặc không đúng định dạng. |
missing-input-response |
Thiếu thông số phản hồi. |
invalid-input-response |
Tham số phản hồi không hợp lệ hoặc sai định dạng. |
bad-request |
Yêu cầu không hợp lệ hoặc không đúng định dạng. |
timeout-or-duplicate |
Phản hồi không còn hợp lệ: quá cũ hoặc đã được sử dụng trước đó. |
Trừ phi có lưu ý khác, nội dung của trang này được cấp phép theo Giấy phép ghi nhận tác giả 4.0 của Creative Commons và các mẫu mã lập trình được cấp phép theo Giấy phép Apache 2.0. Để biết thông tin chi tiết, vui lòng tham khảo Chính sách trang web của Google Developers. Java là nhãn hiệu đã đăng ký của Oracle và/hoặc các đơn vị liên kết với Oracle.
Cập nhật lần gần đây nhất: 2025-07-25 UTC.
[null,null,["Cập nhật lần gần đây nhất: 2025-07-25 UTC."],[[["\u003cp\u003eThis page details how to verify if a user successfully completed a reCAPTCHA challenge on your website or Android app.\u003c/p\u003e\n"],["\u003cp\u003eYou'll receive a response token from the reCAPTCHA integration that needs to be verified within two minutes using the reCAPTCHA API.\u003c/p\u003e\n"],["\u003cp\u003eVerification involves sending a POST request to the reCAPTCHA API with the secret key, response token, and optionally, the user's IP address.\u003c/p\u003e\n"],["\u003cp\u003eThe API response is a JSON object indicating success or failure, along with details like timestamp and potential error codes.\u003c/p\u003e\n"],["\u003cp\u003eEach response token is valid for a single use and expires after two minutes to prevent replay attacks.\u003c/p\u003e\n"]]],["To verify a user's reCAPTCHA response, obtain the response token via the `g-recaptcha-response` parameter, `grecaptcha.getResponse()`, or a callback function for web users or the `SafetyNetApi.RecaptchaTokenResult.getTokenResult()` method for Android. Then, within two minutes, send a POST request to `https://www.google.com/recaptcha/api/siteverify` with `secret` (your site's key) and `response` (the user token). The optional `remoteip` can be included. The JSON response indicates success, timestamp, and hostname or `apk_package_name` if Android, and error codes if any.\n"],null,["# Verifying the user's response\n\nThis page explains how to verify a user's response to a reCAPTCHA challenge from your application's\nbackend.\n\nFor web users, you can get the user's response token in one of three ways:\n\n- `g-recaptcha-response` POST parameter when the user submits the form on your site\n- [`grecaptcha.getResponse(opt_widget_id)`](/recaptcha/docs/display#js_api) after the user completes the reCAPTCHA challenge\n- As a string argument to your [callback function](/recaptcha/docs/display#render_param) if `data-callback` is specified in either the `g-recaptcha` tag attribute or the callback parameter in the `grecaptcha.render` method\n\nFor Android library users, you can call the\n[SafetyNetApi.RecaptchaTokenResult.getTokenResult()](https://developers.google.com/android/reference/com/google/android/gms/safetynet/SafetyNetApi.RecaptchaTokenResult.html#getTokenResult())\nmethod to get response token if the status returns successful.\n\nToken Restrictions\n------------------\n\nEach reCAPTCHA user response token is valid for two minutes, and can only be verified *once* to\nprevent replay attacks. If you need a new token, you can re-run the reCAPTCHA verification.\n\nAfter you get the response token, you need to verify it within two minutes with reCAPTCHA using the\nfollowing API to ensure the token is valid.\n\nAPI Request\n-----------\n\nURL: `https://www.google.com/recaptcha/api/siteverify`\n\nMETHOD: `POST`\n\n| POST Parameter | Description |\n|----------------|---------------------------------------------------------------------------------------------------|\n| `secret` | Required. The shared key between your site and reCAPTCHA. |\n| `response` | Required. The user response token provided by the reCAPTCHA client-side integration on your site. |\n| `remoteip` | Optional. The user's IP address. |\n\nAPI Response\n------------\n\nThe response is a JSON object: \n\n {\n \"success\": true|false,\n \"challenge_ts\": timestamp, // timestamp of the challenge load (ISO format yyyy-MM-dd'T'HH:mm:ssZZ)\n \"hostname\": string, // the hostname of the site where the reCAPTCHA was solved\n \"error-codes\": [...] // optional\n }\n\nFor reCAPTCHA Android: \n\n {\n \"success\": true|false,\n \"challenge_ts\": timestamp, // timestamp of the challenge load (ISO format yyyy-MM-dd'T'HH:mm:ssZZ)\n \"apk_package_name\": string, // the package name of the app where the reCAPTCHA was solved\n \"error-codes\": [...] // optional\n }\n\n### Error code reference\n\n| Error code | Description |\n|--------------------------|---------------------------------------------------------------------------------|\n| `missing-input-secret` | The secret parameter is missing. |\n| `invalid-input-secret` | The secret parameter is invalid or malformed. |\n| `missing-input-response` | The response parameter is missing. |\n| `invalid-input-response` | The response parameter is invalid or malformed. |\n| `bad-request` | The request is invalid or malformed. |\n| `timeout-or-duplicate` | The response is no longer valid: either is too old or has been used previously. |"]]