外观
接口列表
约 1724 字大约 5 分钟
接口对接接口
2025-08-13
请按照 接入准备 中的信息,配置正确的接口域名和鉴权参数,并参考 签名示例 对内容正确签名。
查询科目列表
接口地址: /olylab/api/open/category/list
请求方式: POST
请求数据类型: application/json
接口描述: 在每期项目开始之前,先查询当前可用的科目。不同的项目科目编号不同,但每期项目的科目不变,不用频繁获取。
请求参数:
| 参数名称 | 数据类型 | 参数说明 | 是否必须 |
|---|---|---|---|
| phone | string | 号码 | true |
| currentTime | string | 当前 Unix 时间戳毫秒数 | true |
| sign | string | 签名 | true |
响应参数:
| 参数名称 | 类型 | 参数说明 | 备注 |
|---|---|---|---|
| code | integer | 状态码 | 200:成功,其他状态失败 |
| msg | string | 描述 | |
| data | List | 科目集合 | |
| categoryName | string | 科目名称 | |
| categoryCode | string | 科目Code | |
| categoryDesc | string | 科目描述 | |
| projectName | string | 科目所属项目 |
请求示例:
{
"phone": "132xxx00000",
"currentTime": 1755077458289,
"sign": "5d4566a9bf172d0ed0e4383ab26cbd59"
}响应示例:
{
"code": 200,
"msg": "",
"data": [
{
"categoryName": "数学",
"categoryCode": "M",
"categoryDesc": "",
"projectName" : "竞赛·问鼎·1期"
}
]
}查询知识点
接口地址: /olylab/api/open//tag/tree
请求方式: POST
请求数据类型: application/json
接口描述: 根据系统提供的知识点,给题目设置对应的知识点,在提交题目内容时按照要求格式提交。
请求参数:
| 参数名称 | 数据类型 | 参数说明 | 是否必须 |
|---|---|---|---|
| phone | string | 号码 | true |
| currentTime | string | 当前 Unix 时间戳毫秒数 | true |
| sign | string | 签名 | true |
响应参数:
| 参数名称 | 类型 | 参数说明 | 备注 |
|---|---|---|---|
| code | integer | 状态码 | 200:成功,其他状态失败 |
| msg | string | 描述 | |
| data | List | 标签集合 | |
| value | string | 标签值 | |
| label | string | 标签名称 | |
| children | Lis | 子标签集合 |
请求示例:
{
"phone": "132xxx00000",
"currentTime": 1755077458289,
"sign": "5d4566a9bf172d0ed0e4383ab26cbd59"
}响应示例:
以下只是示例,全部可用的标签见接口真实返回结果。
{
"code": 200,
"msg": "",
"data": [
{
"value": 1,
"label": "未分类标签",
"children": null
},
{
"value": 2,
"label": "学科",
"children": [
{
"value": 3,
"label": "数学",
"children": [
{
"value": 7,
"label": "数学史",
"children": null
},
{
"value": 8,
"label": "数理逻辑与数学基础",
"children": null
}
]
}
]
},
{
"value": 4,
"label": "物理",
"children": [
{
"value": 33,
"label": "力学",
"children": null
},
{
"value": 34,
"label": "物理学史",
"children": null
},
{
"value": 35,
"label": "理论物理学",
"children": null
}
]
}
]
}生成题目编号
接口地址: /olylab/api/open/codeGenerator
请求方式: POST
请求数据类型: application/json
接口描述: 根据科目编号得到对应的题目编号。
请求参数:
| 参数名称 | 数据类型 | 参数说明 | 是否必须 |
|---|---|---|---|
| phone | string | 号码 | true |
| currentTime | string | 当前 Unix 时间戳毫秒数 | true |
| sign | string | 签名 | true |
| categoryCode | string | 科目 Code | true |
响应参数:
| 参数名称 | 类型 | 参数说明 | 备注 |
|---|---|---|---|
| code | integer | 状态码 | 200:成功,其他状态失败 |
| msg | string | 描述 | |
| data | string | 题目编号 |
请求示例:
{
"phone": "132xxx00000",
"currentTime": 1755077458289,
"sign": "5d4566a9bf172d0ed0e4383ab26cbd59",
"categoryCode": "M"
}响应示例:
{
"code": 200,
"msg": "",
"data": "M-20250801-1819-01"
}提交题目内容
接口地址: /olylab/api/open/proposition/submit
请求方式: POST
请求数据类型: multipart/form-data
请注意该接口的请求类型,与其他接口不同,该接口因为要提交文件,需采用 `multipart/form-data;` 的方式。
接口描述: 根据题目编号提交该题目所需的内容。
请求参数:
| 参数名称 | 数据类型 | 参数说明 | 是否必须 |
|---|---|---|---|
| phone | string | 号码 | true |
| currentTime | string | 当前 Unix 时间戳毫秒数 | true |
| sign | string | 签名 | true |
| code | string | 题目 code(由生成题目编号返回) | true |
| questionText | string | 题目(需要对原文进行编码) | true |
| answerText | string | 答案(需要对原文进行编码) | true |
| answerUnit | string | 答案单位(需要对原文进行编码) 根据不同的项目要求把答案数值与单位分开传 | false |
| analysisText | string | 解析(需要对原文进行编码) | true |
| language | string | 语言:zh、en | true |
| knowledgePointList | string | 题目涉及的知识点 | true |
| file | file | 附件 | true |
| processIllusFiles | file[] | 解题过程插图,多个文件 | false |
* 注意事项
knowledgePointList 需选择 查询知识点标签 返回的标签中的叶子节点的知识点,并按照{value: label}的格式转成json字符串传过来。如"{\"33\":\"力学\",\"34\":\"物理学史\"}"
questionText、answerText、answerUnit、analysisText 等字段中会包含大量特殊符号,需要对原字符串URL encode(使用encodeURIComponent对特殊符号进行编码)后,再进行Base64 encode转换。
Encode.java
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class Encode {
public static void main(String[] args) {
String text = "当 $13 < m < 2028.119$ 时,$\\angle A$ 为锐角;当 $m = 2028.119$ 时,$\\angle A$ 为直角;当 $m > 2028.119$ 时,$\\angle A$ 为钝角。";
String encode = URLEncoder.encode(text, StandardCharsets.UTF_8);
byte[] encodeText = Base64.getEncoder().encode(encode.replaceAll("\\+", "%20").getBytes());
System.out.println(new String(encodeText));
}
}原文
当 $13 < m < 2028.119$ 时,$\angle A$ 为锐角;当 $m = 2028.119$ 时,$\angle A$ 为直角;当 $m > 2028.119$ 时,$\angle A$ 为钝角。转义后
JUU3JUFEJTk0JUU2JUExJTg4JTBBJTBBJUU1JUJEJTkzJTIwJTI0MTMlMjAlM0MlMjBtJTIwJTNDJTIwMjAyOC4xMTklMjQlMjAlRTYlOTclQjYlRUYlQkMlOEMlMjQlNUNhbmdsZSUyMEElMjQlMjAlRTQlQjglQkElRTklOTQlOTAlRTglQTclOTIlRUYlQkMlOUIlRTUlQkQlOTMlMjAlMjRtJTIwJTNEJTIwMjAyOC4xMTklMjQlMjAlRTYlOTclQjYlRUYlQkMlOEMlMjQlNUNhbmdsZSUyMEElMjQlMjAlRTQlQjglQkElRTclOUIlQjQlRTglQTclOTIlRUYlQkMlOUIlRTUlQkQlOTMlMjAlMjRtJTIwJTNFJTIwMjAyOC4xMTklMjQlMjAlRTYlOTclQjYlRUYlQkMlOEMlMjQlNUNhbmdsZSUyMEElMjQlMjAlRTQlQjglQkElRTklOTIlOUQlRTglQTclOTIlRTMlODAlODI=响应参数:
| 参数名称 | 类型 | 参数说明 | 备注 |
|---|---|---|---|
| code | integer | 状态码 | 200:成功,其他状态失败 |
| msg | string | 描述 | |
| data | integer | 题目ID |
请求示例:
phone: "132xxx00000"
currentTime: 1754982118765
sign: "5d4566a9bf172d0ed0e4383ab26cbd59"
code: "M-20250801-1819-01"
questionText: "JTB.....JUV"
answerText: "2xhbQlMjBk......W50JTIwZiUyNCUy"
analysisText: "XVpdU1Q3BtYiU3QjE.....bWIlN0IlNUNtYXR"
language: "zh"
knowledgePointList: "{\"33\":\"力学\",\"34\":\"物理学史\"}"
file:
processIllusFiles: []响应示例:
{
"code": 200,
"msg": "",
"data": 123456789
}通过接口提交题目内容之后,可前往对应环境的 用户网页端 查看自己上传的题目内容。
查询题目信息
接口地址: /olylab/api/open/proposition/details
请求方式: POST
请求数据类型: application/json
接口描述: 根据题目ID或题目编号查询详细信息。
请求参数:
| 参数名称 | 数据类型 | 参数说明 | 是否必须 |
|---|---|---|---|
| phone | string | 号码 | true |
| currentTime | string | 当前 Unix 时间戳毫秒数 | true |
| sign | string | 签名 | true |
| code | string | 题目 Code(与id二选一) | false |
| id | string | 题目 ID (与code二选一) | false |
响应参数:
| 参数名称 | 类型 | 参数说明 | 备注 |
|---|---|---|---|
| code | integer | 状态码 | 200:成功,其他状态失败 |
| msg | string | 描述 | |
| data | Object | 题目详情 | |
| id | integer | id | |
| code | string | 题目编号 | |
| categoryId | integer | 所属类目 | |
| categoryName | string | 类目名称 | |
| categoryCode | string | 类目code | |
| auditStatus | integer | 审核状态 | |
| uploadTime | date | 上传时间 | |
| questionText | string | 题目 | |
| answerText | string | 答案 | |
| analysisText | string | 解析 |
请求示例:
{
"phone": "132xxx00000",
"currentTime": 1755077458289,
"sign": "5d4566a9bf172d0ed0e4383ab26cbd59",
"code": "M-20250801-1819-01"
}响应示例:
{
"code": 200,
"msg": "操作成功",
"data": [
{
"id": 123456789,
"code": "M-20250801-1819-01",
"categoryId": 0,
"categoryName": "string",
"categoryCode": "string",
"auditStatus": 0,
"uploadTime": "2019-08-24T14:15:22Z",
"questionText": "string",
"answerText": "string",
"analysisText": "string"
}
]
}auditStatus 审核状态说明
| 描述 | 审核状态 |
|---|---|
| 待上传 | 1 |
| 待审核 | 2 |
| 待复审 | 3 |
| 待终审 | 4 |
| 初审驳回 | 6 |
| 审核通过 | 5 |
| 复审驳回 | 7 |
| 终审驳回 | 8 |
| 撤回题目 | 10 |
| 初审中 | 11 |
| 复审中 | 12 |
| 终审中 | 13 |