云宝数据服务中心

第三方项目接入指南

YUNBAO GAME ACCESS

第三方项目接入云宝平台

本文档面向第三方项目 H5 与项目后端技术人员。你只需要完成网页入口配置、H5 进入参数读取、项目后端凭证校验三件事, 就可以让云宝平台用户从微信小程序内进入你的项目。

接入方式微信小程序内打开第三方 H5 网页。
登录方式平台签发短期进入凭证,项目后端校验。
身份凭据平台分配 appId 和 appSecret。
V1 范围登录授权和进入项目,不含支付与分账。

五步接入

如果你已经拥有可访问的项目 H5 和项目后端,可以按下面顺序完成最小接入。

提交项目网页地址

在云宝后台项目申请中填写项目 H5 的 HTTPS 地址。所有项目都走网页地址,不再区分入口类型。

获取 appId 和 appSecret

项目审核通过后,项目管理员在“我的项目”中生成接入身份。appSecret 明文只显示一次,请保存在项目后端配置中。

在 H5 读取进入参数

H5 读取 URL 中的 enterTicket,再把它提交给你自己的项目后端登录接口。

项目后端校验凭证

项目后端调用云宝平台开放接口,携带 appIdenterTicket 和请求头 x-game-app-secret

建立项目侧会话

平台校验成功后,项目后端创建自己的用户映射和项目登录态,H5 后续只使用项目侧会话访问项目接口。

前置准备

准备项要求说明
项目 H5 地址必须是 HTTPS 网页地址平台小程序会通过 web-view 打开该地址,并追加进入参数。
微信 web-view 业务域名必须在微信小程序后台配置该配置属于微信发布要求,不是云宝后台项目配置字段。域名校验文件必须放在业务域名站点根路径。
项目后端必须由项目方自己部署维护平台不会接管项目玩法、项目数据、项目会话和业务接口。
服务端密钥只能保存在项目后端appSecret 不允许出现在 H5、URL、客户端包体或公开仓库。
微信域名校验文件应能通过 https://业务域名/校验文件名.txt 直接访问。该文件不属于项目源码,不应提交到 Git 仓库;测试服和正式服如使用不同域名,需要分别放置。
平台用户身份只通过服务端校验结果传递。不要信任 URL 中的手机号、昵称、用户 ID 等明文参数,也不要要求平台在 URL 中追加用户资料。

进入流程

用户从云宝小程序点击进入项目后,平台会先为本次进入签发一个短期凭证。这个凭证只用于一次服务端校验。

用户点击进入平台小程序确认用户已登录、项目已上架且可进入。
平台签发凭证平台后端生成短期 enterTicket
web-view 打开 H5网页地址追加 projectIdappIdenterTicketexpiresInsourcereturnUrl
H5 请求项目后端H5 读取凭证,并提交给项目后端登录接口。
后端完成校验项目后端向平台校验成功后建立项目会话。
凭证过期、已使用或校验失败时,项目后端必须拒绝建立项目侧会话,并提示用户重新从云宝平台入口进入。

H5 进入参数

H5 只负责读取平台追加的 URL 进入参数,并把凭证提交给项目后端。H5 不直接校验平台用户身份,也不保存平台密钥。

URL 参数 短期凭证 服务端校验 最小接入示例

页面会收到的参数

参数来源说明
projectId平台小程序平台内项目 ID。
appId平台小程序平台分配给 H5 项目的服务端身份标识。
enterTicket平台小程序短期进入凭证,H5 需要提交给项目后端。
expiresIn平台小程序凭证剩余有效秒数,用于前端判断是否立即进入。
source平台小程序固定来源标识,当前为 yunbao-miniapp
returnUrl平台小程序小程序内返回页面路径。
H5 最小接入示例
const query = new URLSearchParams(window.location.search)
const launchParams = {
  projectId: query.get('projectId') || '',
  appId: query.get('appId') || '',
  enterTicket: query.get('enterTicket') || '',
  expiresIn: Number(query.get('expiresIn') || 0),
  source: query.get('source') || '',
  returnUrl: query.get('returnUrl') || '',
}

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()
}
H5 只能把 enterTicket 交给项目后端。不要在 H5 中配置 appSecret,也不要让 H5 直接调用平台校验接口。

服务端校验

项目后端是接入链路中的可信执行方。你的后端收到 H5 提交的 enterTicket 后,需要调用云宝平台校验接口。

Node.js 项目后端示例
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。不要把手机号、昵称作为唯一身份依据。

查询持卡状态

如项目需要判断用户是否持有指定卡片,后端使用 platformUserId 调用持卡状态接口,以平台当前结果为准。

创建项目侧会话

生成项目自己的登录态,例如 projectToken、服务端 session 或 HttpOnly Cookie。

进入项目业务

后续玩法、资产、地图、排行榜等接口都由项目侧会话保护,不再依赖平台进入凭证。

接口说明

平台小程序申请进入凭证

该接口由云宝平台小程序调用,第三方项目方不需要直接调用。

项目内容
路径POST /api/v1/client/h5-project-access/enter-ticket
调用方云宝平台小程序
身份平台用户登录态
响应entryUrlappIdenterTicketexpiresIn、进入状态

项目后端校验进入凭证

项目内容
路径POST /api/v1/open/h5-project-access/verify-ticket
调用方第三方项目后端
请求头x-game-app-secret: <appSecret>
请求体{ "appId": "...", "enterTicket": "..." }
成功响应validprojectIdplatformUserIdauthTime

项目后端查询用户持卡状态

项目内容
路径POST /api/v1/open/h5-project-access/user-card-holdings
调用方第三方项目后端
请求头x-game-app-secret: <appSecret>
请求体{ "appId": "...", "platformUserId": "..." }
成功响应successitems
校验接口请求示例
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不请求项目登录,阻止进入项目。请从云宝小程序入口进入项目。
凭证过期拒绝建立项目会话。登录已过期,请返回云宝重新进入。
凭证已使用拒绝建立项目会话并记录日志。当前进入状态已失效,请重新进入。
服务端身份无效检查 appIdappSecret 配置。项目服务配置异常,请稍后再试。
平台服务异常返回临时失败,不创建用户和会话。服务暂不可用,请稍后重试。

安全要求

不要暴露 appSecret只允许放在项目后端环境变量或安全配置中。
不要信任前端身份H5 传来的用户资料、URL 参数都不能作为登录依据。
不要复用进入凭证进入凭证只用于一次平台授权校验。
不要记录完整凭证日志可记录状态和摘要,不记录完整 enterTicket 或密钥。
必须使用 HTTPS项目 H5、项目后端和平台接口都应走 HTTPS。
必须处理失败分支校验失败时不能进入项目,不能自动降级为游客身份。

接入检查表

检查项通过标准
项目配置后台项目已审核通过,当前运行环境的网页地址已配置。
接入身份已生成 appIdappSecret,并保存在项目后端。
小程序进入用户从云宝小程序点击进入后,H5 能收到 enterTicket
H5 参数H5 能读取进入参数,并把凭证提交给项目后端。
后端校验项目后端能成功调用平台校验接口,并拿到 platformUserId
项目会话项目后端基于平台授权结果创建自己的项目侧会话。
异常验证凭证缺失、过期、重复使用、密钥错误时均不能进入项目。

架构与时序图

下面的图用于理解平台、小程序、第三方 H5、项目后端和外部服务的职责边界。正式接入时以上方接口和检查表为准。

总体架构图

进入流程时序图

附录资料

以下是平台内部沉淀的详细设计材料,第三方技术人员通常只需要阅读本文档主体;遇到边界问题时再查阅附录。