# 答题游戏接口说明 ## 一. 说明 所有接口均需上传sessionid 通用返回JSON结构, 接口Response的数据结构说明只包含data部分 ``` JSON { "errcode": 0, //0:成功 2: 缺少必要参数(accountid, sessionid) 4: 帐号被封, 5: 帐号未找到 100: 所有未定义的错误 "errmsg": "", //错误描述 "data": {}, // 数据 } ``` ## 二. 客户端接口列表 ### 1. 获取关卡题目列表 1. Method: POST 2. URI: /api/:accountid/puzzle/list | 字段 | 说明 | | -------- | -------------------------------------- | | accountid | 帐号id | > POST参数 | 字段 | 说明 | | -------- | -------------------------------------- | | shop | 店铺id, 比如 607ff59d4a4e16687a3b7079 | | level | 关卡id | | type | 是否降低难度 0: 普通, 1: 降低难度 | 3. Response: JSON ```js { session: "6080f330b9655b5c0467ee5a", // 当前局的id,提交答案时必须上报该字段 records: [{ "id": "6080f330b9655b5c0467ee5e", // 题目id "title": "“大丈夫为国捐躯,死而无憾!”这话是谁说的?", // 问题 "answers": [ // 可选答案 "刘铭传", "徐骧", "刘步蟾", "刘永福" ], "category": "体育-体育", // 类型 "type": 1, // 题目类型 1: 普通的文字选择题, 2: 图形 "quality": 1 // 题目难度 }] } ``` ### 2. 上报题目答案 1. Method: POST 2. URI: /api/:accountid/puzzle/answer | 字段 | 说明 | | -------- | -------------------------------------- | | accountid | 帐号id | > POST参数 | 字段 | 说明 | | -------- | -------------------------------------- | | id | 题目id | | session | 当局的id, 从关卡题目列表中获取 | | level | 关卡id | | answer | 回答的选项 | | type | 回答类型, 0: 正常, 1: 超时 | | mode | 游戏类型, 0: 单人, 1: 多人 | 3. Response: JSON ```js { result: 1, //答题结果 1: 正确, 0 : 错误 gameResult: 0, // 当前局游戏结果 0: 未完成, -1: 失败, 1: 胜利 "stats": { // 当局的状态 "1111": { "answer": [ // 每一题的结果 1, 0 ], "rightCount": 1, // 答对的数量 "errorCount": 1, // 答错的数量 "comboCount": 0, // 当前连续答对的数量 "maxCombo": 1, // 当局连续答对的最大数量 "score": 10, // 当局胜利后的得分 "star": 1, // 当局胜利后获得的星星 "timeLeft": 1, // 当局剩余时间 "gameResult": 0 // 当局的游戏结果, 单人的话和上一层gameResult相同 } } } ``` ### 3. 开始匹配 1. Method: POST 2. URI: /api/:accountid/puzzle/match | 字段 | 说明 | | -------- | -------------------------------------- | | accountid | 帐号id | > POST参数 | 字段 | 说明 | | -------- | -------------------------------------- | | shop | 店铺id | | debug_begin_sec | 游戏于n秒后开始, 最小2秒, 测试用 | 3. Response: JSON ```js { "roomId": "mysWNuFnY", //房间id "beginTime": 1619689073034, // 游戏的开始时间 "sessionId": "adfadf" // 当前用户在该房间的sessionId, 如果有该字段, 客户端在joinById的时候须带上该字段 "session": "608baeea9d0fe70ccd54cf9c" // 当前局的id,提交答案时必须上报该字段 } ``` ### 4. 获取关卡更多题目 1. Method: POST 2. URI: /api/:accountid/puzzle/more | 字段 | 说明 | | -------- | -------------------------------------- | | accountid | 帐号id | > POST参数 | 字段 | 说明 | | -------- | -------------------------------------- | | count | 需要获取的数量 | | session | 当局的id, 从关卡题目列表中获取 | | quality | 难度 | 3. Response: JSON ```js [{ "id": "6080f330b9655b5c0467ee5e", // 题目id "title": "“大丈夫为国捐躯,死而无憾!”这话是谁说的?", // 问题 "answers": [ // 可选答案 "刘铭传", "徐骧", "刘步蟾", "刘永福" ], "category": "体育-体育", // 类型 "type": 1, // 题目类型 1: 普通的文字选择题, 2: 图形 "quality": 1 // 题目难度 }] ``` ### 5. 获取排行榜 1. Method: POST 2. URI: /api/:accountid/puzzle/rank | 字段 | 说明 | | -------- | -------------------------------------- | | accountid | 帐号id | > POST参数 | 字段 | 说明 | | -------- | -------------------------------------- | | shop | 店铺id | | level | 关卡id | | mode | 游戏类型, 0: 单人, 1: 多人 | | skip | 数据开始的偏移值, 从0开始, 默认0 | | limit | 每次返回的数量条数, 默认10 | 3. Response: JSON ```js { userRank: 1, //当前帐号的排名 rankList: [ [ 'account id', 帐号id 'score', 分数 'nickname', 昵称(暂无) 'avatar' 头像 ] ] } ``` ### 6. 获取测验题目列表 1. Method: POST 2. URI: /api/:accountid/exam/list | 字段 | 说明 | | -------- | -------------------------------------- | | accountid | 帐号id | > POST参数 | 字段 | 说明 | | -------- | -------------------------------------- | | shop | 店铺id, 比如 607ff59d4a4e16687a3b7079 | 3. Response: JSON ```js { session: "6080f330b9655b5c0467ee5a", // 当前局的id,提交答案时必须上报该字段 timeone: 10, // 每题最多回答时间 records: [{ "id": "6080f330b9655b5c0467ee5e", // 题目id "title": "“大丈夫为国捐躯,死而无憾!”这话是谁说的?", // 问题 "answers": [ // 可选答案 "刘铭传", "徐骧", "刘步蟾", "刘永福" ], "category": "体育-体育", // 类型 "type": 1, // 题目类型 1: 普通的文字选择题, 2: 图形 "quality": 1 // 题目难度 }] } ``` ### 7. 上报测验题目答案 1. Method: POST 2. URI: /api/:accountid/exam/answer | 字段 | 说明 | | -------- | -------------------------------------- | | accountid | 帐号id | > POST参数 | 字段 | 说明 | | -------- | -------------------------------------- | | id | 题目id | | session | 当局的id, 从关卡题目列表中获取 | | answer | 回答的选项 | | type | 回答类型, 0: 正常, 1: 超时 | 3. Response: JSON ```js { result: 1, //答题结果 1: 正确, 0 : 错误 gameResult: 0, // 当前局游戏结果 0: 未完成, -1: 失败, 1: 胜利 overtime: 0, // 当前回答是否超时 0: 未超时, 1: 超时 "stats": { // 当局的状态 "1111": { "answer": [ // 每一题的结果 1, 0 ], "rightCount": 1, // 答对的数量 "errorCount": 1, // 答错的数量 "comboCount": 0, // 当前连续答对的数量 "maxCombo": 1, // 当局连续答对的最大数量 "score": 10, // 当前得分 "star": 1, // 当局胜利后获得的星星 "timeLeft": 1, // 当局剩余时间 "gameResult": 0, // 当局的游戏结果, 单人的话和上一层gameResult相同 "timeLast": 1620973155307 //上次回答时间 } } } ``` ### 8. 获取店铺信息 1. Method: POST 2. URI: /api/:accountid/shop | 字段 | 说明 | | -------- | -------------------------------------- | | accountid | 帐号id | > POST参数 | 字段 | 说明 | | -------- | -------------------------------------- | | sid | 店铺id | 3. Response: JSON ```js { "id": "607ff59d4a4e16687a3b7079", // 店铺id "name": "一品漫城", // 店铺名 "area": "上海市-上海市-闵行区", // 区域 "logo": "https://resource.kingsome.cn/game607fd53cb40504740fdccb13.png", // 店铺logo "exam": { // 店铺测验信息 "id": "609e13eeccc78154ac683583", //id "name": "第一期测试" // 测验 }, "activity": { // 活动信息 "id": "608bdf61cecfcc2f45247663", // 活动id "name": "第一个活动", // 活动名 "desc": "", // 活动简介 "curren": 1621008800000 // 当前正在进行的活动开始时间, 没有该字段或undefined的话, 说明没有当前进行中的活动 "next": 1621008900000 // 下一个活动开始时间, 没有该字段或undefined的话, 说明没有即将开始的活动 } } ```