答题游戏接口说明
修改记录
2021604
- 增加用户信息, 抽奖转盘信息, 抽奖, 邀请奖励信息, 挑战详情 接口
- 所有接口增加post字段 version(当前版本固定取1.0.1)和sessionid(取自jcfw)
- 获取店铺信息 增加返回店铺的数字编号
- 上报测验题目答案相关接口的 奖励信息 增加返回rewardType, 0: 表明该奖励为优惠券, 1: 抽奖券
- 用户信息上报接口 增加上报当前店铺
20210609
- 增加 邮件列表, 设置邮件已读, 领取邮件附件, 删除邮件
20210610
- 增加 显示正确答案
- 增加 公告列表
20210611
- 获取店铺信息 增加返回字段 local, 用于表示是否使用本地数据
20210616
1 . 获取店铺信息 增加返回默认的分享图和分享语
20210705
- 增加开始分享优惠券, 领取分享的优惠券, 优惠券详情 接口
- 用户券列表, 抽奖, 邀请奖励信息, 领取邮件附件等接口返回的优惠券信息, 增加expire字段
- 获取店铺信息 的gamecfg增加返回 default_desc_txt, 用于首页介绍文字
- 获取店铺信息 的挑战列表增加返回 beginTime和endTime
一. 说明
所有接口均需上传sessionid
通用返回JSON结构, 接口Response的数据结构说明只包含data部分
{
"errcode": 0, //0:成功 2: 缺少必要参数(accountid, sessionid) 4: 帐号被封, 5: 帐号未找到 100: 所有未定义的错误
"errmsg": "", //错误描述
"data": {}, // 数据
}
二. 客户端接口列表
1. 获取关卡题目列表
- Method: POST
- URI: /api/:accountid/puzzle/list
POST参数
字段 |
说明 |
shop |
店铺id, 比如 607ff59d4a4e16687a3b7079 |
level |
关卡id |
type |
是否降低难度 0: 普通, 1: 降低难度 |
- Response: JSON
{
session: "6080f330b9655b5c0467ee5a", // 当前局的id,提交答案时必须上报该字段
records: [{
"id": "6080f330b9655b5c0467ee5e", // 题目id
"title": "“大丈夫为国捐躯,死而无憾!”这话是谁说的?", // 问题
"answers": [ // 可选答案
"刘铭传",
"徐骧",
"刘步蟾",
"刘永福"
],
"category": "体育-体育", // 类型
"type": 1, // 题目类型 1: 普通的文字选择题, 2: 图形, 3: 问卷式题目
"quality": 1 // 题目难度
}]
}
2. 上报题目答案
- Method: POST
- URI: /api/:accountid/puzzle/answer
POST参数
字段 |
说明 |
id |
题目id |
session |
当局的id, 从关卡题目列表中获取 |
level |
关卡id |
answer |
回答的选项 |
type |
回答类型, 0: 正常, 1: 超时 |
mode |
游戏类型, 0: 单人, 1: 多人 |
debug |
多人模式时, 如果该字段有值, 则直接进入下一轮 |
- Response: JSON
{
result: 1, //答题结果 1: 正确, 0 : 错误
gameResult: 0, // 当前局游戏结果 0: 未完成, -1: 失败, 1: 胜利
answer: '正确答案',
over: 0.1222, // 超越玩家值, 显示时x100
"stats": { // 当局的状态
"1111": {
"answer": {// 每一题的结果, key为题目的id, 值为answer在答案中的index值, 0为正确值, -1为超时, 其他都为错误
"608a3d15e678843dd443fa53": 0,
},
"total": 2, // 总答题数量
"rightCount": 1, // 答对的数量
"errorCount": 1, // 答错的数量
"comboCount": 0, // 当前连续答对的数量
"maxCombo": 1, // 当局连续答对的最大数量
"score": 10, // 当局胜利后的得分
"star": 1, // 当局胜利后获得的星星
"timeLeft": 1, // 当局剩余时间
"gameResult": 0 // 当局的游戏结果, 单人的话和上一层gameResult相同
}
},
}
3. 开始匹配
- Method: POST
- URI: /api/:accountid/puzzle/match
POST参数
字段 |
说明 |
shop |
店铺id |
aid |
活动id |
debug_begin_sec |
游戏于n秒后开始, 最小2秒, 测试用 |
debug_qcount |
题目数量 |
- Response: JSON
{
"roomId": "mysWNuFnY", //房间id
"beginTime": 1619689073034, // 游戏的开始时间
"sessionId": "adfadf" // 当前用户在该房间的sessionId, 如果有该字段, 客户端在joinById的时候须带上该字段
"session": "608baeea9d0fe70ccd54cf9c" // 当前局的id,提交答案时必须上报该字段
}
4. 获取关卡更多题目
- Method: POST
- URI: /api/:accountid/puzzle/more
POST参数
字段 |
说明 |
count |
需要获取的数量 |
session |
当局的id, 从关卡题目列表中获取 |
quality |
难度 |
- Response: JSON
[{
"id": "6080f330b9655b5c0467ee5e", // 题目id
"title": "“大丈夫为国捐躯,死而无憾!”这话是谁说的?", // 问题
"answers": [ // 可选答案
"刘铭传",
"徐骧",
"刘步蟾",
"刘永福"
],
"category": "体育-体育", // 类型
"type": 1, // 题目类型 1: 普通的文字选择题, 2: 图形, 3: 问卷式题目
"quality": 1 // 题目难度
}]
5. 获取排行榜
- Method: POST
- URI: /api/:accountid/puzzle/rank
POST参数
字段 |
说明 |
shop |
店铺id |
level |
关卡id, 挑战模式下, 传挑战的id, 店铺挑战总榜: 挑战id_total, 店铺挑战分桌榜: 挑战id_桌号 |
mode |
游戏类型, 0: 单人, 1: 多人, 2: 挑战 |
skip |
数据开始的偏移值, 从0开始, 默认0 |
limit |
每次返回的数量条数, 默认10 |
- Response: JSON
{
userRank: 1, //当前帐号的排名
rankList: [
[
'account id', 帐号id
'score', 分数
'nickname', 昵称(暂无)
'avatar' 头像
]
],
rankTotal: 99 排行榜总人数
}
6. 获取测验题目列表
- Method: POST
- URI: /api/:accountid/exam/list
POST参数
字段 |
说明 |
shop |
店铺id, 比如 607ff59d4a4e16687a3b7079 |
eid |
测验id, 比如 609e13eeccc78154ac683583 |
delay |
每题需要增加的延迟时间, 单位秒 |
- Response: JSON
{
session: "6080f330b9655b5c0467ee5a", // 当前局的id,提交答案时必须上报该字段
timeone: 10, // 每题最多回答时间
records: [{
"id": "6080f330b9655b5c0467ee5e", // 题目id
"title": "“大丈夫为国捐躯,死而无憾!”这话是谁说的?", // 问题
"answers": [ // 可选答案
"刘铭传",
"徐骧",
"刘步蟾",
"刘永福"
],
"category": "体育-体育", // 类型
"type": 1, // 题目类型 1: 普通的文字选择题, 2: 图形, 3: 问卷式题目
"quality": 1 // 题目难度
}]
}
7. 上报测验题目答案
- Method: POST
- URI: /api/:accountid/exam/answer
POST参数
字段 |
说明 |
id |
题目id |
session |
当局的id, 从关卡题目列表中获取 |
answer |
回答的选项 |
type |
回答类型, 0: 正常, 1: 超时 |
- Response: JSON
{
result: 1, //答题结果 1: 正确, 0 : 错误
gameResult: 0, // 当前局游戏结果 0: 未完成, -1: 失败, 1: 胜利
overtime: 0, // 当前回答是否超时 0: 未超时, 1: 超时
answer: '正确答案',
over: 0.1222, // 超越玩家值, 显示时x100
"stats": { // 当局的状态
"1111": {
"answer": {// 每一题的结果, key为题目的id, 值为answer在答案中的index值, 0为正确值, -1为超时, 其他都为错误
"608a3d15e678843dd443fa53": 0,
},
"total": 2, // 总答题数量
"rightCount": 1, // 答对的数量
"errorCount": 1, // 答错的数量
"comboCount": 0, // 当前连续答对的数量
"maxCombo": 1, // 当局连续答对的最大数量
"score": 10, // 当前得分
"star": 1, // 当局胜利后获得的星星
"timeLeft": 1, // 当局使用时间
"gameResult": 0, // 当局的游戏结果, 单人的话和上一层gameResult相同
"timeLast": 1620973155307 //上次回答时间
}
},
"rewards": [{
coupon: '优惠券的id',
name: '优惠券名',
count: 1, //数量
couponUrl: '优惠券详情图的url',
ids: ['获取记录的短id'],
rewardType: 0 //奖励类型 0: 优惠券 1: 抽奖券
}]
}
8. 获取店铺信息
- Method: POST
- URI: /api/:accountid/shop
POST参数
- Response: JSON
{
"id": "607ff59d4a4e16687a3b7079", // 店铺id
"numid": 1002, // 店铺的数字编号
"name": "一品漫城", // 店铺名
"area": "上海市-上海市-闵行区", // 区域
"local": 0, // 是否使用本地数据, 0: 否, 1: 是
"logo": "https://resource.kingsome.cn/game607fd53cb40504740fdccb13.png", // 店铺logo
"exams": [{ // 店铺测验信息
"id": "609e13eeccc78154ac683583", //id
"name": "第一期测试", // 测验
"desc": "简介",
"icon": "", // 相关icon
"banner": "", // 介绍大图
"beginTime": 121212121, // 开始时间
"endTime": 12312312312 // 结束时间
}],
"activity": { // 活动信息
"id": "608bdf61cecfcc2f45247663", // 活动id
"name": "第一个活动", // 活动名
"desc": "", // 活动简介
"icon": "", // 活动相关icon
"banner": "", // 活动介绍大图
"curren": 1621008800000 // 当前正在进行的活动开始时间, 没有该字段或undefined的话, 说明没有当前进行中的活动
"next": 1621008900000 // 下一个活动开始时间, 没有该字段或undefined的话, 说明没有即将开始的活动
},
"gameCfg": {
"game_main_pic": "主页正中间图片",
"bg_item_icon": "背景图案",
"game_single_btn": "主页上单人赛按钮文字",
"game_multi_btn": "主页上多人赛按钮名字",
"default_share_pic":"默认分享图",
"default_share_txt": "默认分享语",
"default_desc_txt": "配置的介绍文字",
"music_bg": "后台配置的背景音乐cdn地址"
}
}
9. 用户统计信息
- Method: POST
- URI: /api/:accountid/stats
- Response: JSON
{
"map": [ //能力地图数据
{
"id": 0,
"name": "知识面", // 显示的文字
"score": 6, // 分值
"max": 20 // 该项最大分值
},
{
"id": 1,
"name": "知识深度",
"score": 11,
"max": 20
},
{
"id": 2,
"name": "反应能力",
"score": 15,
"max": 20
},
{
"id": 3,
"name": "毅力",
"score": 14,
"max": 20
},
{
"id": 4,
"name": "其他",
"score": 2,
"max": 20
}
],
"rightCount": 100, // 总的答对的题目数量
"errorCount": 100, // 总的答错的题目数量
"singleCount": 20, // 单人模式参与局数
"singleWin": 15, // 单人模式胜利局数
"singleLose": 5, // 单人模式失败局数
"activityCount": 20, // 参与活动数量
"examCount": 21 // 参与挑战数量
}
10. 用户信息上报
- Method: POST
- URI: /api/:accountid/login
POST参数
字段 |
说明 |
nickname |
昵称 |
avatar |
头像 |
mobile |
手机号 |
sex |
性别 |
country |
国家 |
province |
省份 |
city |
城市 |
shop |
店铺id |
- Response: JSON
{
token: '1231231aasa'
}
11. 用户券列表
- Method: POST
- URI: /api/:accountid/tickets
POST参数
字段 |
说明 |
sid |
店铺id, 不传的话, 获取所有 |
- Response: JSON
[{
id: '记录id',
shop: '店铺id',
shopName: '店铺名',
coupon: '券id',
couponName: '券名',
couponUrl: '券图片url',
status: '状态', //0: 未使用 , 1: 已使用 2: 赠送中, 3: 已赠送,9: 已过期
expire: 0 // 过期时间, 0 为永不过期
}]
12. 用户信息
- Method: POST
- URI: /api/:accountid/info
POST参数
- Response: JSON
{
tocket_lottery: 10, //用户在当前店铺拥有的抽奖券数量
}
13. 抽奖转盘信息
- Method: POST
- URI: /api/:accountid/lottery_info
POST参数
- Response: JSON
[ // 奖励列表
{
coupon: '优惠券的id', // 如果该值为 empty, 说明是留空的,
name: '优惠券名',
count: 1, //数量
couponUrl: '优惠券详情图的url',
rewardType: 0, // 0: 优惠券, 1: 抽奖券
}
]
14. 抽奖
- Method: POST
- URI: /api/:accountid/lottery
POST参数
- Response: JSON
[{ // 本次请求新获得的物品
coupon: '优惠券的id',
name: '优惠券名',
count: 1, //数量
couponUrl: '优惠券详情图的url',
rewardType: 0, // 0: 优惠券, 1: 抽奖券
expire: 0 // 过期时间, 0表示永不过期
}]
15. 邀请奖励信息
- Method: POST
- URI: /api/:accountid/share_rewards
POST参数
- Response: JSON
{
num: 10, // 已邀请人数
newget: [{ // 本次请求新获得的物品
coupon: '优惠券的id',
name: '优惠券名',
count: 1, //数量
couponUrl: '优惠券详情图的url',
rewardType: 0, // 0: 优惠券, 1: 抽奖券
expire: 0 // 过期时间, 0表示永不过期
}]
rewards: [ // 奖励列表
{
coupon: '优惠券的id',
name: '优惠券名',
count: 1, //数量
couponUrl: '优惠券详情图的url',
rewardType: 0, // 0: 优惠券, 1: 抽奖券
score: 100, // 获得条件
geted: 0, // 是否已获得, 0: 未获得, 1: 已获得
}
]
}
16. 挑战奖励详情
- Method: POST
- URI: /api/:accountid/exam_rewards
POST参数
字段 |
说明 |
sid |
店铺id |
eid |
挑战活动id |
- Response: JSON
[ // 奖励列表
{
coupon: '优惠券的id',
name: '优惠券名',
count: 1, //数量
couponUrl: '优惠券详情图的url',
type: 0, //类型 0: 单局能获得的奖励 1: 累计榜积分奖励, 2: 累计榜排名奖励
rewardType: 0, // 0: 优惠券, 1: 抽奖券
score: 100, // 获得条件,type=2的类型, score是排名, 其他类型为积分
scoreEnd: 150, // 只有type=2的时候才需要考虑该值, 表示从第几名到第几名能获得奖励
geted: 0, // 是否已获得, 0: 未获得, 1: 已获得
}
]
17. 邮件列表
- Method: POST
- URI: /api/:accountid/mails
POST参数
- Response: JSON
[{
_id: '邮件id',
title: '邮件标题',
content: 1: '邮件正文'
status: 0, // 邮件状态: 0: 未读 1: 已读, 2: 已领取附件
items: [{
itemId: '物品的id'
name: '物品名',
count: 1 // 数量
}]
}]
18. 设置邮件已读
- Method: POST
- URI: /api/:accountid/mail/read
POST参数
19. 领取邮件附件
- Method: POST
- URI: /api/:accountid/mail/attachment
POST参数
- Response: JSON
[{ // 获得的物品列表
coupon: '优惠券的id',
name: '优惠券名',
count: 1, //数量
couponUrl: '优惠券详情图的url',
rewardType: 0, // 0: 优惠券, 1: 抽奖券
expire: 0 // 过期时间, 0表示永不过期
}]
20. 删除邮件
- Method: POST
- URI: /api/:accountid/mail/delete
POST参数
21. 显示正确答案
- Method: POST
- URI: /api/:accountId/puzzle/help
POST参数
字段 |
说明 |
id |
题目id |
session |
当局的id, 从关卡题目列表中获取 |
- Response: JSON
{
answer: '1123123'
}
说明, 这里获取的answer是使用 当前比赛session_当前题目的id_答案_jcfw中的sessionid, 计算md5
22. 公告列表
- Method: POST
- URI: /api/:accountId/announces
POST参数
字段 |
说明 |
sid |
店铺id |
ids |
已读的公告id数组 |
- Response: JSON
{
"id": "60c1d800646792f5f3764e93", // 公告id
"content": "22", // 公告内容, 最好用ubb富文本来显示
"endTime": 1623921267010, // 公告过期时间
"sendTime": 1623316467010, // 公告发送时间
"title": "111", // 公告标题
"type": 2 // 公告类型 0: 普通 1: 店铺群发 2: 全体
}
23. 开始分享优惠券
- Method: POST
- URI: /api/:accountId/coupon/begin_share
POST参数
- Response: JSON
{}
24. 领取分享的优惠券
- Method: POST
- URI: /api/:accountId/coupon/receive_coupon
POST参数
字段 |
说明 |
id |
优惠券的短id |
shop |
优惠券的所属店铺 |
sender |
分享者的accountId |
- Response: JSON
{
id: '记录id',
shop: '店铺id',
shopName: '店铺名',
coupon: '券id',
couponName: '券名',
couponUrl: '券图片url',
status: '状态', //0: 未使用 , 1: 已使用 9: 已过期
expire: 0 // 过期时间, 0表示永不过期
}
25. 优惠券详情
- Method: POST
- URI: /api/:accountId/coupon/info
字段 |
说明 |
accountid |
优惠券拥有者的帐号id |
POST参数
字段 |
说明 |
id |
优惠券的短id |
shop |
优惠券的所属店铺 |
- Response: JSON
{
id: '记录id',
shop: '店铺id',
shopName: '店铺名',
coupon: '券id',
couponName: '券名',
couponUrl: '券图片url',
status: '状态', //0: 未使用 , 1: 已使用 2: 赠送中, 3: 已赠送(已被领取) ,9: 已过期
expire: 0, // 过期时间, 0表示永不过期
user: '拥有者的昵称',
userAvatar: '拥有者的头像'
}