YUNBAO GAME ACCESS
第三方项目接入云宝平台
本文档面向第三方项目 H5 与项目后端技术人员。你只需要完成网页入口配置、H5 SDK 接入、项目后端凭证校验三件事, 就可以让云宝平台用户从微信小程序内进入你的项目。
五步接入
如果你已经拥有可访问的项目 H5 和项目后端,可以按下面顺序完成最小接入。
在云宝后台项目申请中填写项目 H5 的 HTTPS 地址和 H5 业务域名。所有项目都走网页地址,不再区分入口类型。
项目审核通过后,项目管理员在“我的项目”中生成接入身份。appSecret 明文只显示一次,请保存在项目后端配置中。
H5 通过 SDK 读取 URL 中的 enterTicket,再把它提交给你自己的项目后端登录接口。
项目后端调用云宝平台开放接口,携带 appId、enterTicket 和请求头 x-game-app-secret。
平台校验成功后,项目后端创建自己的用户映射和项目登录态,H5 后续只使用项目侧会话访问项目接口。
前置准备
| 准备项 | 要求 | 说明 |
|---|---|---|
| 项目 H5 地址 | 必须是 HTTPS 网页地址 | 平台小程序会通过 web-view 打开该地址,并追加进入参数。 |
| H5 业务域名 | 需要提交给平台配置 | 用于平台审核、入口校验和微信小程序业务域名配置。 |
| 项目后端 | 必须由项目方自己部署维护 | 平台不会接管项目玩法、项目数据、项目会话和业务接口。 |
| 服务端密钥 | 只能保存在项目后端 | appSecret 不允许出现在 H5、URL、客户端包体或公开仓库。 |
进入流程
用户从云宝小程序点击进入项目后,平台会先为本次进入签发一个短期凭证。这个凭证只用于一次服务端校验。
enterTicket。projectId、enterTicket、expiresIn。H5 SDK
SDK 的职责是帮助 H5 读取平台进入参数,并把凭证提交给项目后端。SDK 不直接校验平台用户身份,也不保存平台密钥。
页面会收到的参数
| 参数 | 来源 | 说明 |
|---|---|---|
projectId | 平台小程序 | 平台内项目 ID。 |
enterTicket | 平台小程序 | 短期进入凭证,H5 需要提交给项目后端。 |
expiresIn | 平台小程序 | 凭证剩余有效秒数,用于前端判断是否立即进入。 |
source | 平台小程序 | 固定来源标识,当前为 yunbao-miniapp。 |
import { createYunbaoGameSdk } from './platform-game-sdk'
const sdk = createYunbaoGameSdk()
const launchParams = sdk.getLaunchParams()
if (!launchParams.enterTicket) {
showError('请从云宝小程序入口进入项目')
} else {
const loginResult = await fetch('/api/yunbao/login', {
method: 'POST',
headers: { 'content-type': 'application/json' },
body: JSON.stringify({
projectId: launchParams.projectId,
enterTicket: launchParams.enterTicket,
}),
}).then((response) => response.json())
saveGameSession(loginResult.projectToken)
startGame()
}
enterTicket 交给项目后端。不要在 H5 中配置 appSecret,也不要让 H5 直接调用平台校验接口。服务端校验
项目后端是接入链路中的可信执行方。你的后端收到 H5 提交的 enterTicket 后,需要调用云宝平台校验接口。
async function verifyYunbaoTicket(enterTicket) {
const response = await fetch('https://api.example.com/api/v1/open/h5-project-access/verify-ticket', {
method: 'POST',
headers: {
'content-type': 'application/json',
'x-game-app-secret': process.env.YUNBAO_APP_SECRET,
},
body: JSON.stringify({
appId: process.env.YUNBAO_APP_ID,
enterTicket,
}),
})
const result = await response.json()
if (!response.ok || !result.valid) {
throw new Error(result.message || '云宝平台授权校验失败')
}
return result
}
校验成功后你应该做什么
使用平台返回的 platformUserId 映射到项目自己的用户 ID。不要把手机号、昵称作为唯一身份依据。
生成项目自己的登录态,例如 projectToken、服务端 session 或 HttpOnly Cookie。
后续玩法、资产、地图、排行榜等接口都由项目侧会话保护,不再依赖平台进入凭证。
接口说明
平台小程序申请进入凭证
该接口由云宝平台小程序调用,第三方项目方不需要直接调用。
| 项目 | 内容 |
|---|---|
| 路径 | POST /api/v1/client/h5-project-access/enter-ticket |
| 调用方 | 云宝平台小程序 |
| 身份 | 平台用户登录态 |
| 响应 | entryUrl、enterTicket、expiresIn、进入状态 |
项目后端校验进入凭证
| 项目 | 内容 |
|---|---|
| 路径 | POST /api/v1/open/h5-project-access/verify-ticket |
| 调用方 | 第三方项目后端 |
| 请求头 | x-game-app-secret: <appSecret> |
| 请求体 | { "appId": "...", "enterTicket": "..." } |
| 成功响应 | valid、projectId、platformUserId、authTime |
curl -X POST 'https://api.example.com/api/v1/open/h5-project-access/verify-ticket' \
-H 'content-type: application/json' \
-H 'x-game-app-secret: YOUR_APP_SECRET' \
-d '{
"appId": "YOUR_APP_ID",
"enterTicket": "ENTER_TICKET_FROM_H5"
}'
错误处理
| 场景 | 项目侧处理 | 用户提示建议 |
|---|---|---|
H5 没有收到 enterTicket | 不请求项目登录,阻止进入项目。 | 请从云宝小程序入口进入项目。 |
| 凭证过期 | 拒绝建立项目会话。 | 登录已过期,请返回云宝重新进入。 |
| 凭证已使用 | 拒绝建立项目会话并记录日志。 | 当前进入状态已失效,请重新进入。 |
| 服务端身份无效 | 检查 appId 和 appSecret 配置。 | 项目服务配置异常,请稍后再试。 |
| 平台服务异常 | 返回临时失败,不创建用户和会话。 | 服务暂不可用,请稍后重试。 |
安全要求
enterTicket 或密钥。接入检查表
| 检查项 | 通过标准 |
|---|---|
| 项目配置 | 后台项目已审核通过,网页地址和 H5 业务域名已配置。 |
| 接入身份 | 已生成 appId 和 appSecret,并保存在项目后端。 |
| 小程序进入 | 用户从云宝小程序点击进入后,H5 能收到 enterTicket。 |
| H5 SDK | H5 能读取进入参数,并把凭证提交给项目后端。 |
| 后端校验 | 项目后端能成功调用平台校验接口,并拿到 platformUserId。 |
| 项目会话 | 项目后端基于平台授权结果创建自己的项目侧会话。 |
| 异常验证 | 凭证缺失、过期、重复使用、密钥错误时均不能进入项目。 |
架构与时序图
下面的图用于理解平台、小程序、第三方 H5、项目后端和外部服务的职责边界。正式接入时以上方接口和检查表为准。
总体架构图
进入流程时序图
附录资料
以下是平台内部沉淀的详细设计材料,第三方技术人员通常只需要阅读本文档主体;遇到边界问题时再查阅附录。