Skip to content
API
Tiktok验证码

Tiktok 验证码

概述

TikTok 验证码是 TikTok 使用的身份验证系统,用于保护平台免受机器人和垃圾邮件的侵害。此验证码通常在注册新账户、登录或出现异常活动时出现。

🎵

目前已有适用于浏览器上所有 4 种验证码类型的扩展,请私信管理员获取扩展。为浏览器、模拟器和手机提供所有类型的验证码。

旋转验证码

1. 创建任务

请求

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

参数

参数名数据类型必需?描述
clientKeystringyesAPI 密钥
task.typestringyesTiktokCaptchaTask
task.imagestringyes图像的 Base64
task.subTypeintyes验证码类型:0(浏览器上的旋转验证码)、1(滑块验证码)、2(选择 2 个相同对象)、3(手机、模拟器上的旋转验证码)、5(选择满足问题的物体)
task.otherstringno对于 subType 5,此字段是必需的。验证码的问题,例如:"Which of these objects neighs"

请求示例

POST /createTask HTTP/1.1
Host: api.achicaptcha.com
Content-Type: application/json
 
{
	"clientKey": "YOUR_API_KEY",
	"task": {
		"type": "TiktokCaptchaTask",
		"image": "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...(10460 chars omitted)...V7Q4rk8i3IvOS/eZexY2wFyvTDXyzAWT5qNlUXkiKiAJVRdUYlkBFEQQRQEC2yAghRCyCWQSyBZAsgWQW1kCyCoCCoqIqoFkVCiCKXVC3ooCKKKxIRkhCxZw+Zj8FjMPpFmJjHRYdL69ad0OidK+5LIM1V6WM3fQBZRD5TbagWWbCZZKsVRiqqCIIindVil0UJQEQ5XRV5oiHZA3sgKBzRBFSyIHS6AgWRQa3RCyAgHZFUahA5ofAdkVLoKgnOyKE6KgoBQUDVGSE2CBYWUVjyRU5qMtgAKCAAqKoGqErZVFCrHYAqjIBRAKoiAqj//Z",
		"subType": 2
	}
}

响应

成功时,服务器将返回 errorId = 0taskId

{
  "errorId": 0,
  "taskId": "f2fc70d6-c76b-4fba-9480-205ac1fe9fb9"
}

发送到服务器的图像样本

在浏览器上:

image 字段 = base64_外部图像|base64_内部图像

旋转验证码 - 外部图像
旋转验证码 - 内部图像

在模拟器、手机上:

image 字段是 1 张图像的 base64,裁剪的图像仅包含旋转验证码部分(足够 2 个圆圈,可以在边缘有多余的白色部分,多余部分的长度可选)

手机上的旋转验证码

2. 获取结果

请求

POST https://api.achicaptcha.com/getTaskResult

参数

参数名数据类型必需?描述
clientKeystringyes网站上的 API 密钥
taskIdstringyes从 (1) 获取的 TaskId

请求示例

POST /getTaskResult HTTP/1.1
Host: api.achicaptcha.com
Content-Type: application/json
 
{
	"clientKey": "您的 API_KEY",
	"taskId": "f2fc70d6-c76b-4fba-9480-205ac1fe9fb9"
}

响应

{
  "errorId": 0,
  "status": "ready",
  "solution": "x1,y1,x2,y2"
}

返回结果的含义

  • errorId = 0status = ready:解决成功,在 solution 中读取结果
  • errorId = 1status = processing:正在解决验证码,等待 1-2 秒后重试
  • errorId 非 0 和 1:系统错误,返回错误代码和错误描述
  • solution
    • 对于浏览器上的旋转验证码:返回需要拖动滑块的段长度
    • 对于模拟器、手机上的旋转验证码:返回旋转角度,用户根据公式计算需要拖动的段:需要拖动的段 = (L / 180) * solution(其中 L 是从滑块起始位置到结束位置的距离,从滑块中心计算)
    • 对于滑块验证码:返回需要沿图像 x 轴拖动的坐标
    • 对于选择 2 个相同对象的验证码:返回需要在图像上点击的坐标对 "x1,y1,x2,y2"
    • 对于选择满足问题的多个物体的验证码:返回需要在图像上点击的坐标 "x1,y1,x2,y2,x3,y3,..."

集成示例

import requests
import time
import base64
 
def solve_tiktok_captcha(image_base64, sub_type, question=None, api_key='YOUR_API_KEY'):
    # 步骤 1:创建任务
    task = {
        'type': 'TiktokCaptchaTask',
        'image': image_base64,
        'subType': sub_type
    }
    
    # 如果 subType = 5,添加 other 字段(问题)
    if sub_type == 5 and question:
        task['other'] = question
    
    create_task_url = 'https://api.achicaptcha.com/createTask'
    create_task_payload = {
        'clientKey': api_key,
        'task': task
    }
    
    response = requests.post(create_task_url, json=create_task_payload)
    result = response.json()
    
    if result['errorId'] != 0:
        raise Exception(result.get('errorDescription', 'Unknown error'))
    
    task_id = result['taskId']
    
    # 步骤 2:获取结果
    get_result_url = 'https://api.achicaptcha.com/getTaskResult'
    
    while True:
        time.sleep(2)  # 等待 2 秒
        
        get_result_payload = {
            'clientKey': api_key,
            'taskId': task_id
        }
        
        response = requests.post(get_result_url, json=get_result_payload)
        result = response.json()
        
        if result['errorId'] == 0 and result.get('status') == 'ready':
            return result['solution']
        
        if result['errorId'] == 1 and result.get('status') == 'processing':
            # 继续等待
            continue
        
        # 其他错误
        raise Exception(result.get('errorDescription', 'Unknown error'))
 
# 使用 - 选择 2 个对象验证码的示例(subType = 2)
with open('captcha_image.png', 'rb') as f:
    image_base64 = base64.b64encode(f.read()).decode('utf-8')
 
sub_type = 2  # 0:浏览器旋转,1:滑块,2:选择 2 个对象,3:手机旋转,5:根据问题选择
solution = solve_tiktok_captcha(image_base64, sub_type, api_key='YOUR_API_KEY')
print('TikTok 验证码解决方案:', solution)  # "x1,y1,x2,y2"

常见错误代码

创建任务时的错误代码

错误代码描述注释
0success创建任务成功
2missing required fields缺少必需字段,检查参数(image、subType)
3task not supported不支持的任务类型
4task creation failed创建任务失败,稍后重试
5client key does not existAPI 密钥不存在,检查 API 密钥
6insufficient account balance账户余额不足,充值积分

获取结果时的错误代码

错误代码描述注释
0success成功,在 solution 字段中读取结果
1processing正在处理,等待 1-2 秒后重新发送请求
5client key does not existAPI 密钥不存在,检查 API 密钥
7task failed, please create a new task任务失败,请创建新任务
8task ID does not exist任务 ID 不存在或已过期

最佳实践

为了在使用 Achicaptcha API 时获得最佳效果,请遵循以下原则:

1. 正确识别验证码类型和 subType

  • TikTok 使用多种不同类型的验证码
  • 准确检测正在显示的验证码类型
  • 在请求中发送正确的 subType
    • 0:浏览器上的旋转验证码
    • 1:滑块验证码
    • 2:选择 2 个相同对象
    • 3:手机、模拟器上的旋转验证码
    • 5:选择满足问题的物体(需要添加 other 字段)

2. 正确格式化图像

  • 浏览器上的旋转验证码:发送 base64_外部图像|base64_内部图像
  • 手机/模拟器上的旋转验证码:发送 1 张图像的 base64(仅包含旋转验证码部分)
  • 其他类型:发送相应图像的 base64
  • 确保图像以正确的 base64 格式编码

3. 正确处理结果

  • 对于模拟器/手机上的旋转验证码:计算拖动距离,公式为:拖动距离 = (L / 180) * solution
    测量旋转验证码拖动距离 L 的方法
    如上图所示测量 L,用于拖动距离计算
  • 对于选择对象验证码:解析坐标字符串 "x1,y1,x2,y2" 以获取需要点击的点
  • 对于滑块验证码:使用返回的 x 坐标拖动滑块

4. 轮询间隔

  • 在结果检查之间至少等待 1-2 秒
  • 不要用太多连续请求轰炸 API
  • 设置超时以避免无限循环(建议 120 秒)

5. 错误处理

  • 检查 errorId = 1status = processing 以继续等待
  • 适当处理其他错误
  • 为临时错误实施重试逻辑

6. API 密钥安全

  • 不要在代码中硬编码 API 密钥
  • 使用环境变量
  • 不要在客户端暴露 API 密钥

有用的链接: