版本: v1.0
Base URL: https://<your-domain>(服务器地址,从客户端APP获取)
认证: 登录后返回 token,后续接口通过请求头 Authorization: Bearer <token> 访问
flowchart TD
A[羊多多APP] -->|启动小游戏| B[小游戏启动]
A -->|POST /game/auth 传递用户+服务端信息| B
B --> C{已在APP登录?}
C -- 是 --> D[加载配置/资源] C -- 否 --> G[弹窗提示前往APP登录 终止进入小游戏]
D --> E[GET /user/{id} 拉取用户数据]
E --> F[进入首页/待机]
F --> H[GET /game/rank 排行榜]
F --> I[POST /game/energy/exchange 能量兑换]
F --> J[POST /game/match/start|end 记账]
code 整型,0 表示成功,非 0 表示失败errMsg 字符串,错误说明data 字典类型,成功时的业务数据page 从 1 开始的页码row 每页记录数,默认 10,最大 100,服务端可做限制userId 作为 UDID(客户端已生成并持久化)H5 小游戏主动向 APP 客户端请求用户与服务端配置信息,用于后续调用 /game/auth 完成认证并访问服务端接口。
code int 成功为 0errMsg string 错误说明data objectuserId string 用户唯一标识(UDID)appToken string 可选;APP 侧登录态令牌,用于服务端校验serverConfig object 服务端配置信息root_url string 服务端根地址cdn_url string CDN 根地址config_url string 配置文件相对路径,如 config.json示例
GET /client/info HTTP/1.1
{
"code": 0,
"errMsg": "",
"data": {
"userId": "u_9d2b3f1a",
"appToken": "app-token-xxx",
"serverConfig": {
"root_url": "https://api.example.com",
"cdn_url": "https://cdn.example.com/1.2.4/",
"config_url": "config.json"
}
}
}
用于小游戏认证,核实用户是否已在羊多多APP登录,同时下发服务端配置信息。
Body (application/json)
userId string 必填;APP生成并传递的用户唯一ID(UDID)appToken string 可选;APP侧登录态令牌,用于服务端校验Response
code int 成功为 0;未登录返回 1001errMsg string 失败信息或未登录说明data objectauthorized boolean 是否已在 APP 登录userId string 确认后的用户唯一标识cdn_url string CDN 根地址config_url string 配置文件相对路径,如 config.json token string 可选;服务端签发的访问令牌,用于后续接口 Authorization示例
POST /game/auth HTTP/1.1
Content-Type: application/json
{
"userId": "u_9d2b3f1a",
"appToken": "app-token-xxx"
}
{
"code": 0,
"errMsg": "",
"data": {
"authorized": true,
"userId": "u_9d2b3f1a",
"token": "eyJhbGciOi...",
"serverConfig": {
"root_url": "https://api.example.com",
"cdn_url": "https://cdn.example.com/1.2.4/",
"config_url": "config.json",
}
}
}
未登录示例
{ "code": 1001, "errMsg": "未在APP登录,请前往APP登录后重试", "data": { "authorized": false } }
拉取用户资料与游戏进度数据。
id string 用户ID(UDID)code interrMsg stringdata objectuserId string 用户IDnickName string 昵称avatarUrl string 头像 URLgender number 可选;性别,0 未知,1 男,2 女profile object 游戏进度与资产gold int 金币highScore int 最高分exp int 经验值level int 段位等级skills object 技能等级映射,键为技能ID,值为等级cars object 车辆解锁映射,键为车ID,值 1 表示已解锁carsLv object 每辆车的属性等级carsSkin object 每辆车当前皮肤IDcarskinUnlock object 皮肤解锁状态,键为皮肤ID, 值 1 表示已解锁energy int 体力/能量当前值(新增)maxEnergy int 体力最大值(新增)energyRemainSec int 距离下一个体力点恢复的剩余秒数(新增)starBank int 累计星星储备(新增,用于权益兑换)lastExitTime int64 最后退出游戏时间戳(秒)playNum int 当日对局次数示例
GET /user/u_9d2b3f1a HTTP/1.1
Authorization: Bearer eyJhbGciOi...
{
"code": 0,
"errMsg": "",
"data": {
"userId": "u_9d2b3f1a",
"nickName": "羊乐乐",
"avatarUrl": "https://cdn/avatar/xxx.png",
"gender": 1,
"profile": {
"gold": 280,
"highScore": 5230,
"exp": 180,
"level": 7,
"skills": { "101": 3, "102": 1 },
"cars": { "0": 1, "3": 1 },
"carsLv": { "0": 5 },
"carsSkin": { "0": 12 },
"carskinUnlock": { "12": 1, "200": 1 },
"energy": 8,
"maxEnergy": 20,
"energyRemainSec": 45,
"starBank": 36,
"lastExitTime": 1731540000,
"playNum": 5
}
}
}
同步/更新指定用户的统一数据。用于双向打通,将客户端新增字段合并入服务端存储。
id string 用户IDBody (application/json)
profile JSON; 自定义键值内容(有数值变化的字段)gold int 金币highScore int 最高分exp int 经验值level int 段位等级skills object 技能等级映射,键为技能ID,值为等级cars object 车辆解锁映射,键为车ID,值 1 表示已解锁carsLv object 每辆车的属性等级carsSkin object 每辆车当前皮肤IDcarskinUnlock object 皮肤解锁状态,键为皮肤ID, 值 1 表示已解锁energy int 体力/能量当前值(新增)maxEnergy int 体力最大值(新增)energyRemainSec int 距离下一个体力点恢复的剩余秒数(新增)starBank int 累计星星储备(新增,用于权益兑换)lastExitTime int64 最后退出游戏时间戳(秒)Response
code interrMsg stringdata object 返回更新后的数据(可选)示例
PUT /user/u_9d2b3f1a HTTP/1.1
Authorization: Bearer eyJhbGciOi...
Content-Type: application/json
{
"userId": "u_9d2b3f1a",
"profile": {
"gold": 300,
"highScore": 5230,
"level": 7,
"energy": 7,
"maxEnergy": 20,
"energyRemainSec": 300,
"starBank": 40
}
}
{ "code": 0, "errMsg": "", "data": { "updated": true } }
获取排行榜列表;默认按段位与最高分排序。
orderBy string 可选;默认 level_desc,highScore_descpage int 页码,默认 1row int 页大小,默认 10code interrMsg stringdata objectlist arrayuserId string 用户IDnickName string 昵称avatarUrl string 头像 URLgender number 可选;0/1/2highScore int 最高分level int 段位page int 当前页row int 页大小total int 总记录数示例
GET /game/rank?page=1&row=10 HTTP/1.1
Authorization: Bearer eyJhbGciOi...
{
"code": 0,
"errMsg": "",
"data": {
"list": [
{ "userId": "u_a1", "nickName": "玩家A", "avatarUrl": "", "gender": 0, "highScore": 8860, "level": 9 },
{ "userId": "u_b2", "nickName": "", "avatarUrl": "", "gender": 0, "highScore": 7310, "level": 8 }
],
"page": 1,
"row": 10,
"total": 245
}
}
使用羊多多APP金币兑换游戏能量;兑换比例由后台配置。
userId string 用户IDcoins int 请求兑换的APP金币数量requestId string 可选;幂等请求ID,防重放code interrMsg stringdata objectenergyDelta int 增加的能量值energyAfter int 兑换后的能量maxEnergy int 最大能量rate string 实际生效的兑换比例,如 "10_coins:1_energy"requestId string 幂等ID回显示例
POST /game/energy/exchange HTTP/1.1
Authorization: Bearer eyJhbGciOi...
Content-Type: application/json
{
"userId": "u_9d2b3f1a",
"coins": 100,
"requestId": "req_20251114_0001"
}
{
"code": 0,
"errMsg": "",
"data": { "energyDelta": 10, "energyAfter": 18, "maxEnergy": 20, "rate": "10_coins:1_energy", "requestId": "req_20251114_0001" }
}
开局扣能量并返回本局凭证。
userId string 用户IDmode string 可选;游戏模式/场景energyCost int 本局消耗能量(由服务端确定,客户端传建议值)code interrMsg stringdata objectmatchId string 本局唯一凭证energyAfter int 扣减后的能量maxEnergy int 最大能量结算上报本局结果;服务端计算并落库,同时按最高分与段位更新排行榜。
userId string 用户IDmatchId string 与开局返回一致score int 本局分数level int 本局结束时段位starsEarned int 本局收集星星数durationSec int 对局时长(秒)killCount int 击败敌人数(如有)carLevel int 本局车等级(如有)code interrMsg stringdata objecthighScore int 更新后的最高分level int 更新后的段位starBankAfter int 累计星星,变动后的数值level DESC, highScore DESC;客户端允许传 orderBy,但服务端可限制允许列表energy 与恢复节奏;客户端可显示 energyRemainSec 倒计时(离线恢复算法参考),以服务端数据为准starBank 为累计星星余额;每局 starsEarned 入账;兑换(道具/权益)由服务端扣减并返回最新余额requestId/matchId 防重复;服务端需判重处理userId 兜底展示Authorization: Bearer <token> 必填(除登录验证)Content-Type: application/json 必填(POST/PUT)row=100userId string 用户唯一标识(UDID)nickName string 用户昵称avatarUrl string 用户头像URLgold int 金币余额highScore int 最高分exp int 经验值level int 段位等级skills object 技能等级映射(键:技能ID,值:等级)cars object 车辆解锁映射(键:车ID,值:1表示已解锁)carsLv object 车辆属性等级(键:车ID,值:等级)carsSkin object 当前车皮肤(键:车ID,值:皮肤ID)carskinUnlock object 皮肤解锁状态(键:皮肤ID,值:1表示已解锁)energy int 当前能量(体力)maxEnergy int 最大能量energyRemainSec int 距离恢复下一个能量点的剩余秒数starBank int 累计星星余额(用于权益兑换)lastExitTime int64 最近一次退出时间(秒)play_num int 当日对局次数matchId string 对局唯一凭证(扩展)requestId string 幂等请求ID(兑换/结算)如需我根据后端实际实现调整字段命名或增加更多示例,请告知。