appid
客户唯一编号,用于识别授权客户、题池范围和调用套餐。
统一提供题库信息、顺序练习、随机练习、分类取题、模拟考试、图片与语音队列。第三方客户使用 appid + appSecret 鉴权。
https://api.it2345.com/api/v1/ddjk/index.php
?endpoint=random
&pool=c1
&limit=20
&bank_mode=original
&appid=YOUR_APPID
&appSecret=YOUR_APPSECRET
所有开放接口统一使用 HTTPS 和 UTF-8 JSON。
https://api.it2345.com/api/v1/ddjk/index.php
https://dd.it2345.com 同源服务端代理接入。
第三方开放接口统一使用 appid 与 appSecret。
客户唯一编号,用于识别授权客户、题池范围和调用套餐。
客户密钥。新建客户时明文展示一次,丢失后应重置,不应公开反查。
以 C1 随机获取 20 道标准题库题目为例。
GET /api/v1/ddjk/index.php
?endpoint=random
&pool=c1
&limit=20
&bank_mode=original
&appid=YOUR_APPID
&appSecret=YOUR_APPSECRET
申请授权
取得 appid 和 appSecret。
确认权限
核对题池、接口、次数和有效期。
服务端请求
通过 HTTPS 请求接口。
按字段展示
保留 HTML、图片和语音队列。
endpoint 参数决定当前调用的业务接口。
| 用途 | endpoint | 说明 |
|---|---|---|
| 接口概览 | meta | 获取接口版本、服务状态和基础说明。 |
| 题池列表 | banks | 返回当前客户已授权的正式题池。 |
| 题库版本 | version | 返回题库、分类和内容版本信息。 |
| 随机练习 | random | 在授权题池中随机获取题目。 |
| 顺序练习 | sequential | 按正式题序分页获取题目。 |
| 分类目录 | groups | 获取后端正式发布的章节、专项和分类。 |
| 分类取题 | group-questions | 按分类 ID 读取对应题目。 |
| 模拟考试 | exam | 按考试规则生成试卷,终端负责计时和交卷流程。 |
不同 endpoint 可能还有专属参数,未使用的参数不必传递。
| 参数 | 是否必填 | 示例 | 说明 |
|---|---|---|---|
endpoint | 必填 | random | 当前调用的接口名称。 |
appid | 必填 | ddjk_xxx | 客户授权编号。 |
appSecret | 必填 | YOUR_APPSECRET | 客户密钥,仅保存在服务端。 |
pool | 取题必填 | c1 | 正式题池编码,以 banks 返回为准。 |
bank_mode | 选填 | original | original 标准题库;optimized 优化题库;不传默认 original。 |
limit | 选填 | 20 | 本次返回数量,受客户套餐和接口限制。 |
offset / page | 选填 | 0 / 1 | 顺序分页参数,按接口实际返回使用。 |
group_id | 分类取题 | chapter_xxx | 由 groups 接口返回,前端不得自行编造。 |
标准题库和优化题库共用正式 question_id,但分类、进度和缓存需要隔离。
返回正式原版分类、题序、技巧、官方解释、图片和语音。
返回优化章节、专项、学习路线和老师点拨,不改变原题与答案。
正式名称统一为 考前200题,正式路线标识统一为 sprint.200。
fast.3days、快速学习、3天速通仅作为历史兼容别名,不再显示独立入口,也不建立第二份学习进度。
接口返回字段会保留原题文本、答案、图片、语音及教学内容。
id / qid / question_id
question_type / type
title_html
title_text
options
answer_keys
analysis_html
analysis_text
skill_html
skill_text
teacher_tip_html
teacher_tip_text
image_url
audio
*_html用于页面正式展示,应保留后端已有 HTML 高亮和排版,不能自行猜关键词。
*_text用于搜索、日志、纯文本展示或语音文本,不应替代正式 HTML 展示。
{
"status": "ok",
"data": [
{
"question_id": "examdata_10001",
"type": "single",
"title_html": "题干 HTML",
"options": [
{"key": "A", "html": "选项 A"}
],
"answer_keys": ["A"],
"analysis_html": "官方解释",
"skill_html": "技巧讲解",
"teacher_tip_html": "老师点拨",
"image_url": "",
"audio": {}
}
]
}
终端直接使用返回的真实 URL 和播放队列,不得自行拼接或使用 TTS 兜底。
| 字段 | 用途 |
|---|---|
image_url | 图片或 GIF 资源地址,终端直接使用返回值。 |
audio.read_question_queue | 主动读题完整播放队列。 |
audio.question_stem_queue | 题干语音队列。 |
audio.correct_answer_queue | 正确答案字母和内容播放队列。 |
audio.wrong_answer_queue_normal | 非 VIP 答错讲解队列。 |
audio.wrong_answer_queue_vip | VIP 答错技巧和老师点拨队列。 |
audio.option_audio_urls | 当前题选项内容语音。 |
audio.skill_audio_url | 原技巧讲解语音。 |
audio.teacher_tip_audio_url | 老师点拨语音;为空时不显示播放按钮。 |
audio.official_audio_url | 官方解释语音。 |
示例中的凭证必须替换,并保存在服务端环境变量或安全配置中。
curl -G 'https://api.it2345.com/api/v1/ddjk/index.php' \
--data-urlencode 'endpoint=random' \
--data-urlencode 'pool=c1' \
--data-urlencode 'limit=20' \
--data-urlencode 'bank_mode=original' \
--data-urlencode 'appid=YOUR_APPID' \
--data-urlencode 'appSecret=YOUR_APPSECRET'
// 仅用于服务端 Node.js,浏览器前端不要保存 appSecret
const url = new URL('https://api.it2345.com/api/v1/ddjk/index.php');
url.search = new URLSearchParams({
endpoint: 'random',
pool: 'c1',
limit: '20',
bank_mode: 'original',
appid: process.env.DDJK_APPID,
appSecret: process.env.DDJK_APP_SECRET
});
const response = await fetch(url);
const data = await response.json();
<?php
$params = http_build_query([
'endpoint' => 'random',
'pool' => 'c1',
'limit' => 20,
'bank_mode' => 'original',
'appid' => getenv('DDJK_APPID'),
'appSecret' => getenv('DDJK_APP_SECRET'),
]);
$json = file_get_contents(
'https://api.it2345.com/api/v1/ddjk/index.php?' . $params
);
$data = json_decode($json, true, 512, JSON_THROW_ON_ERROR);
using var client = new HttpClient();
var url = "https://api.it2345.com/api/v1/ddjk/index.php"
+ "?endpoint=random"
+ "&pool=c1"
+ "&limit=20"
+ "&bank_mode=original"
+ "&appid=" + Uri.EscapeDataString(appId)
+ "&appSecret=" + Uri.EscapeDataString(appSecret);
var json = await client.GetStringAsync(url);
业务状态以 JSON 中的 status 和 message 为准。
| 状态 | 说明 | 处理建议 |
|---|---|---|
ok | 请求成功。 | 按 data 字段继续处理。 |
unauthorized | appid、appSecret 错误或授权未启用。 | 核对凭证和客户状态。 |
expired | 授权已到期。 | 续费或调整授权有效期。 |
limited | 次数、接口范围或题库范围受限。 | 核对套餐、剩余次数和题池权限。 |
invalid_request | 缺少必要参数或请求方式不正确。 | 检查 endpoint、pool、分类 ID 和参数格式。 |
正式上线前应完成权限、缓存、字段和异常处理验收。
请完整检查题目展示、题型、选项顺序、答案判定、图片加载、语音播放、错题/收藏/进度记录和异常提示。