# reCAPTCHA v3

> Lấy token reCAPTCHA v3 (gồm cả bản Enterprise) bằng YesCaptcha: cách điền pageAction, các loại có điểm cố định 0.7 và 0.9, loại tác vụ và giá, tham số, ví dụ và kết quả trả về.

Source: https://docs.yescaptcha.com/vi/tasks/recaptcha-v3/ · Last verified: 2026-10-15

> This page was machine-translated from the Chinese version. If anything differs, the Chinese version prevails: https://docs.yescaptcha.com/zh/tasks/recaptcha-v3/

reCAPTCHA v3 không có ô đánh dấu và không có hình ảnh; trang web chấm điểm người truy cập ở chế độ nền. YesCaptcha trả về một token (`gRecaptchaResponse`) để bạn gửi cho trang web đích. `RecaptchaV3TaskProxyless` có giá 20 điểm (≈ $3.00 / 1k) cho mỗi tác vụ, trả kết quả bất đồng bộ: gọi `createTask` trước, rồi cứ 5 giây gọi lại `getTaskResult` một lần. Nếu nhận dạng thất bại hoặc hết thời gian chờ, hệ thống tự động hoàn điểm.

- POST `https://api.yescaptcha.com/createTask` (Endpoint quốc tế)
- POST `https://cn.yescaptcha.com/createTask` (Endpoint Trung Quốc)

Nội dung yêu cầu là JSON, xác thực bằng `clientKey`. Tạo tác vụ ở endpoint nào thì truy vấn kết quả ở endpoint đó.

## Trường hợp áp dụng

-   Mã nguồn trang web có `grecaptcha.execute(...)`, hoặc tải `recaptcha/api.js?render=SITE_KEY`: reCAPTCHA v3 bản thường.
-   Trang gọi `grecaptcha.enterprise.execute(...)`, hoặc tải `recaptcha/enterprise.js`: reCAPTCHA v3 Enterprise, dùng `RecaptchaV3EnterpriseTask` hoặc `RecaptchaV3EnterpriseTaskM1`.

Cách phân biệt xem [Xác định loại captcha](https://docs.yescaptcha.com/vi/guides/identify-captcha.md).

## Loại tác vụ và giá

| Loại tác vụ | Giá | Cách trả kết quả | Ghi chú |
| --- | --- | --- | --- |
| `RecaptchaV3TaskProxyless` | $3.00 / 1k; 20 điểm/tác vụ · ¥20 / 1k | Bất đồng bộ |  |
| `RecaptchaV3TaskProxylessM1` | $3.75 / 1k; 25 điểm/tác vụ · ¥25 / 1k | Bất đồng bộ |  |
| `RecaptchaV3TaskProxylessM1S7` | $4.50 / 1k; 30 điểm/tác vụ · ¥30 / 1k | Bất đồng bộ | Yêu cầu điểm 0.7; không cần tham số bổ sung |
| `RecaptchaV3TaskProxylessM1S9` | $5.25 / 1k; 35 điểm/tác vụ · ¥35 / 1k | Bất đồng bộ | Yêu cầu điểm 0.9; không cần tham số bổ sung |
| `RecaptchaV3EnterpriseTask` | $3.00 / 1k; 20 điểm/tác vụ · ¥20 / 1k | Bất đồng bộ |  |
| `RecaptchaV3EnterpriseTaskM1` | $3.75 / 1k; 25 điểm/tác vụ · ¥25 / 1k | Bất đồng bộ |  |

Giá bằng đô la Mỹ chỉ là ước tính theo US$1 ≈ ¥6.67; tác vụ được trừ điểm.

-   `RecaptchaV3TaskProxyless` và `RecaptchaV3TaskProxylessM1` có tham số giống nhau nhưng đi qua đường khác nhau, có thể dùng làm dự phòng cho nhau.
-   Khi trang web đích yêu cầu điểm cao, hãy dùng `RecaptchaV3TaskProxylessM1S7` (0.7) hoặc `RecaptchaV3TaskProxylessM1S9` (0.9) với điểm cố định, không cần tham số bổ sung.

## Tham số yêu cầu

| Trường | Kiểu | Bắt buộc | Mô tả |
| --- | --- | --- | --- |
| `type` | string | Có | Loại tác vụ; xem "Loại tác vụ và giá" trên trang này |
| `websiteURL` | string | Có | URL đầy đủ của trang hiển thị captcha. Điền trang web nơi bạn thấy captcha, không điền tên miền của nhà cung cấp captcha |
| `websiteKey` | string | Có | Khóa trang web (sitekey), tìm trong mã nguồn trang hoặc trong các request mạng; thường không thay đổi |
| `pageAction` | string | Không | Giá trị action của reCAPTCHA v3; phải khớp với giá trị trang truyền vào `grecaptcha.execute`, nếu không token có thể bị từ chối |

`pageAction` phải khớp với `action` mà trang web truyền vào khi gọi `grecaptcha.execute(SITE_KEY, {action: '...'})`; điền sai thì trang web có thể từ chối token. Cách tìm xem [Tìm tham số reCAPTCHA](https://docs.yescaptcha.com/vi/guides/find-recaptcha-parameters.md).

## Ví dụ yêu cầu

POST https://api.yescaptcha.com/createTask

```json
{
  "clientKey": "YOUR_CLIENT_KEY",
  "task": {
    "type": "RecaptchaV3TaskProxyless",
    "websiteURL": "https://example.com/login",
    "websiteKey": "SITE_KEY_OF_THE_PAGE",
    "pageAction": "login"
  }
}
```

**curl**

```bash
curl -s https://api.yescaptcha.com/createTask \
  -H 'Content-Type: application/json' \
  -d '{
  "clientKey": "YOUR_CLIENT_KEY",
  "task": {
    "type": "RecaptchaV3TaskProxyless",
    "websiteURL": "https://example.com/login",
    "websiteKey": "SITE_KEY_OF_THE_PAGE",
    "pageAction": "login"
  }
}'

# Returns {"errorId":0,"taskId":"..."}; then poll every 5 seconds:
curl -s https://api.yescaptcha.com/getTaskResult \
  -H 'Content-Type: application/json' \
  -d '{"clientKey": "YOUR_CLIENT_KEY", "taskId": "TASK_ID"}'
```

**Python**

solve.py

```python
import os
import time

import requests

API = "https://api.yescaptcha.com"
CLIENT_KEY = os.environ["YESCAPTCHA_CLIENT_KEY"]  # Read the clientKey from an environment variable

def call(method, payload):
    r = requests.post(f"{API}/{method}", json={"clientKey": CLIENT_KEY, **payload}, timeout=30)
    data = r.json()
    if data.get("errorId"):
        raise RuntimeError(f"{data.get('errorCode')}: {data.get('errorDescription')}")
    return data

def solve(task):
    task_id = call("createTask", {"task": task})["taskId"]
    for _ in range(36):  # Poll every 5 seconds, for up to about 3 minutes
        time.sleep(5)
        result = call("getTaskResult", {"taskId": task_id})
        if result.get("status") == "ready":
            return result["solution"]
    raise TimeoutError(task_id)

solution = solve({
    "type": "RecaptchaV3TaskProxyless",
    "websiteURL": "https://example.com/login",
    "websiteKey": "SITE_KEY_OF_THE_PAGE",
    "pageAction": "login",
})
print(solution["gRecaptchaResponse"])
```

**Node.js**

solve.mjs

```js
const API = 'https://api.yescaptcha.com';
const CLIENT_KEY = process.env.YESCAPTCHA_CLIENT_KEY; // Read the clientKey from an environment variable

async function call(method, payload) {
  const res = await fetch(`${API}/${method}`, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ clientKey: CLIENT_KEY, ...payload }),
  });
  const data = await res.json();
  if (data.errorId) throw new Error(`${data.errorCode}: ${data.errorDescription}`);
  return data;
}

async function solve(task) {
  const { taskId } = await call('createTask', { task });
  for (let i = 0; i < 36; i++) { // Poll every 5 seconds, for up to about 3 minutes
    await new Promise((r) => setTimeout(r, 5000));
    const result = await call('getTaskResult', { taskId });
    if (result.status === 'ready') return result.solution;
  }
  throw new Error(`timeout: ${taskId}`);
}

const solution = await solve({
  type: "RecaptchaV3TaskProxyless",
  websiteURL: "https://example.com/login",
  websiteKey: "SITE_KEY_OF_THE_PAGE",
  pageAction: "login",
});
console.log(solution.gRecaptchaResponse);
```

Thay `websiteURL`, `websiteKey`, `pageAction` bằng giá trị của trang web đích.

## Kết quả trả về

```json
{
  "errorId": 0,
  "status": "ready",
  "solution": {
    "gRecaptchaResponse": "03AGdBq25SxXT-pmSeBXjzScW-EiocHwwpwqtk1QXlJnGnU..."
  }
}
```

| Trường | Kiểu | Mô tả |
| --- | --- | --- |
| `gRecaptchaResponse` | string | Token cần gửi cho website đích. Chỉ dùng một lần, có hiệu lực khoảng 120 giây; nên dùng trong vòng 60 giây |

Khi đang xử lý, hệ thống trả về `{"errorId": 0, "status": "processing"}`; hãy truy vấn lại sau 5 giây. Khi có lỗi, xử lý theo `errorCode`, xem [Mã lỗi](https://docs.yescaptcha.com/vi/api/errors.md). Cách gửi token sau khi nhận được xem [Dùng token để vượt reCAPTCHA](https://docs.yescaptcha.com/vi/guides/submit-recaptcha-token.md).

## Câu hỏi thường gặp

### Vì sao đôi khi trang web không chấp nhận token?

Với v3, trang web đích quyết định dựa trên điểm số, và ngưỡng do trang web đặt có thể thay đổi bất cứ lúc nào, nên không phải token nào cũng qua được. Hãy kiểm tra `pageAction` đã đúng chưa; nếu trang web yêu cầu điểm cao, thử `M1S7`, `M1S9`; cũng có thể so sánh với các loại tương tự khác.

### Điền reCAPTCHA v3 Enterprise như thế nào?

Giống bản thường: điền `websiteURL`, `websiteKey`, `pageAction`, và đổi loại tác vụ thành `RecaptchaV3EnterpriseTask` hoặc `RecaptchaV3EnterpriseTaskM1`.

### Token có hiệu lực trong bao lâu?

Chỉ dùng được một lần, có hiệu lực khoảng 120 giây; nên gửi trong vòng 60 giây.

## Hướng dẫn liên quan

-   [Xác định loại captcha](https://docs.yescaptcha.com/vi/guides/identify-captcha.md)
-   [Tìm tham số reCAPTCHA](https://docs.yescaptcha.com/vi/guides/find-recaptcha-parameters.md) (gồm cách tìm `pageAction`)
-   [Dùng token để vượt reCAPTCHA](https://docs.yescaptcha.com/vi/guides/submit-recaptcha-token.md)
