Tokenwave EN Открыть бота
Главная›Введение

Быстрый старт

Полный путь от ключа до токена. Всё, что нужно, — Python или Node.js и несколько минут.

#Шаг 1. Ключ и баланс

Откройте бота, нажмите Start, затем Мой ключ и Пополнить. Подробности — в разделе Начало работы.

Важно

чтобы создать задачу, на балансе должно быть не меньше стоимости одной задачи, см. Тарифы и лимиты.

#Шаг 2. Проверьте ключ

Метод getBalance ничего не стоит и сразу показывает, что ключ работает.

curl -X POST https://api.tokenwave.org/getBalance \
  -H "Content-Type: application/json" \
  -d '{"clientKey": "ВАШ_КЛЮЧ"}'
import requests

print(requests.post("https://api.tokenwave.org/getBalance", json={"clientKey": "ВАШ_КЛЮЧ"}).json())
const res = await fetch("https://api.tokenwave.org/getBalance", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ clientKey: "ВАШ_КЛЮЧ" }),
}).then((r) => r.json());
console.log(res);

Ожидаемый ответ: { "errorId": 0, "balance": 5.0 }. Если пришла ERROR_KEY_DOES_NOT_EXIST — проверьте ключ.

#Шаг 3. Получите параметры страницы, создайте задачу и дождитесь токена

Скрипт делает всё сразу: берёт gid, sitekey и cookies на странице регистрации Steam, создаёт задачу и опрашивает результат.

import time
import requests

API = "https://api.tokenwave.org"
KEY = "ВАШ_КЛЮЧ"
UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36"
JOIN = "https://store.steampowered.com/join/"


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


# 1. параметры страницы Steam: два запроса в одной сессии
s = requests.Session()
s.headers["User-Agent"] = UA
s.get(JOIN, timeout=20)
ref = s.post(JOIN + "refreshcaptcha/", data={"hcaptcha": 1, "count": 1}, timeout=20, headers={
    "X-Requested-With": "XMLHttpRequest",
    "Origin": "https://store.steampowered.com",
    "Referer": JOIN,
}).json()
cookies = "; ".join(f"{k}={v}" for k, v in s.cookies.get_dict().items())

# 2. создаём задачу
task_id = call("createTask", {"task": {
    "type": "HCaptchaTask",
    "websiteURL": JOIN,
    "websiteKey": ref["sitekey"],
    "data": ref["gid"],
    "isInvisible": True,
    "userAgent": UA,
    "cookies": cookies,
    "fallbackToActualUA": True,
}})["taskId"]

# 3. ждём решения (до 2 минут)
deadline = time.time() + 120
while time.time() < deadline:
    time.sleep(3)
    res = call("getTaskResult", {"taskId": task_id})
    if res["status"] == "ready":
        token = res["solution"]["gRecaptchaResponse"]
        print("токен:", token[:40], "…")   # подставьте в запрос Steam в течение 60 секунд
        break
else:
    raise RuntimeError("TIMEOUT")
const API = "https://api.tokenwave.org";
const KEY = "ВАШ_КЛЮЧ";
const UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36";
const JOIN = "https://store.steampowered.com/join/";

async function call(method, payload) {
  const r = await fetch(`${API}/${method}`, {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({ clientKey: KEY, ...payload }),
  }).then((r) => r.json());
  if (r.errorId) throw new Error(r.errorCode);
  return r;
}

// 1. параметры страницы Steam: два запроса в одной сессии
const page = await fetch(JOIN, { headers: { "User-Agent": UA } });
const cookies = page.headers.getSetCookie().map((c) => c.split(";")[0]).join("; ");
const ref = await fetch(JOIN + "refreshcaptcha/", {
  method: "POST",
  headers: {
    "User-Agent": UA,
    Cookie: cookies,
    "Content-Type": "application/x-www-form-urlencoded",
    "X-Requested-With": "XMLHttpRequest",
    Origin: "https://store.steampowered.com",
    Referer: JOIN,
  },
  body: "hcaptcha=1&count=1",
}).then((r) => r.json());

// 2. создаём задачу
const { taskId } = await call("createTask", {
  task: {
    type: "HCaptchaTask",
    websiteURL: JOIN,
    websiteKey: ref.sitekey,
    data: ref.gid,
    isInvisible: true,
    userAgent: UA,
    cookies,
    fallbackToActualUA: true,
  },
});

// 3. ждём решения (до 2 минут)
const deadline = Date.now() + 120000;
while (Date.now() < deadline) {
  await new Promise((r) => setTimeout(r, 3000));
  const res = await call("getTaskResult", { taskId });
  if (res.status === "ready") {
    console.log("токен:", res.solution.gRecaptchaResponse.slice(0, 40), "…"); // подставьте в запрос Steam в течение 60 секунд
    break;
  }
}

#Шаг 4. Используйте токен

Токен gRecaptchaResponse одноразовый и живёт 60 секунд. Передайте его в запрос Steam в той же сессии, в которой получили gid: с теми же cookies, userAgent и IP.

#Чек-лист перед запуском

  • ключ активен, баланс не меньше цены одной задачи;
  • userAgent, cookies и IP (прокси) принадлежат одной сессии;
  • gid свежий: получен непосредственно перед созданием задачи;
  • результат опрашивается не чаще одного раза в 2–3 секунды;
  • токен используется не позже чем через 60 секунд;
  • при ERROR_CAPTCHA_UNSOLVABLE берётся новый gid, а не повторяется старая задача.

#Что дальше

© Tokenwave. Решение hCaptcha для Steam.Поддержка: кнопка «Помощь» в боте