标准接入流程(5 步)
1
应用注册
在 IM 开放平台提交应用信息、回调域名与申请 scope,等待平台审核。
2
发放凭证
审核通过后发放 appId + appSecret,登记 scope(应用级授权)。
3
用户授权
引导用户 OAuth 授权指定 scope(用户级授权)。
4
用户同步
OAuth userinfo 拉取 + UserProfileChanged 事件订阅(授权范围内)。
5
业务打通
第三方用自身业务闭环,经 IM 入口/消息触达用户;解绑/撤销即断开。
应用信息
| 字段 | 说明 |
|---|---|
appId | 平台审核通过后发放的唯一应用标识 |
appName | 应用名称 |
callbackUrl | OAuth 回调地址(HTTPS) |
appType | 应用类型 |
scope | 申请的授权范围(最小授权) |
status | PENDING / APPROVED / SUSPENDED |
授权流程
OAuth 2.0 Authorization Code + PKCE,两层授权:
- 应用级授权(接入即授权):应用审核通过即获得 appId + appSecret,并登记 scope。
- 用户级授权(OAuth):第三方引导用户授权指定 scope。
时序
-
1第三方 App→IMGET /oauth/authorize?appId&scope&redirect_uri&code_challenge&code_challenge_method=S256
-
2IM→用户展示授权页,用户确认
-
3用户→IM用户确认,重定向 redirect_uri?code=...
-
4第三方 App→IMPOST /oauth/token(code + PKCE verifier)
-
5IM→第三方 App返回 access_token / refresh_token / expires_in
-
6第三方 App→IMGET /oauth/userinfo(Bearer token)
H5 内嵌 WebView 授权(原生桥 · 微信小程序模型)
第三方业务以 H5 页面内嵌在 IM App WebView 中运行时(本地生活 / KTV / 酒店 / 打车等小程序),通过容器注入的原生桥完成「IM 用户 → 第三方用户」授权登录,对齐微信小程序模型:wx.login() ↔ GVBridge.login(),code2Session ↔ /oauth/token + /api/v1/identity/oauth/im/callback。
时序
-
1IM App(容器)→WebView注入 window.GVBridge.login({ appId, scope, redirectUri })
-
2第三方 H5→IM AppGVBridge.login()(App 原生用自身 JWT 调 /oauth/authorize 拿 code)
-
3IM App→第三方 H5返回 { code, code_verifier, redirect_uri }
-
4第三方 H5→第三方后端POST /api/v1/identity/oauth/im/callback(code + verifier + app_id)→ SaaS accessToken + accountId
-
5第三方 H5→第三方后端GET /auth/contexts + POST /auth/context/select → X-Tenant-Context
关键点
- JWT 不出 App:App 原生持有登录 JWT,只在桥里用于拿 code,不进入 H5 的 JS、不进 URL。
- code 一次性、5 分钟有效;换回的 SaaS accessToken 是 JWT(含 exp)。
- 登录态有效性:H5 再次打开校验 SaaS token 的 exp,有效直接进业务,过期重新 GVBridge.login()。
- redirect_uri 为 H5 自身 URL,须与开放平台登记的 callbackUrl 精确一致(含尾斜杠)。
标准接口清单
| 方法与路径 | 说明 |
|---|---|
POST /open/applications | 应用注册申请 |
GET /open/applications/{appId} | 应用信息查询(平台审核) |
PUT /open/applications/{appId} | 应用信息/scope 管理 |
GET /oauth/authorize | 用户授权页 |
GET /oauth/consent | 用户同意页(短期 request_id) |
POST /oauth/token | code 换 token + userinfo |
GET /oauth/userinfo | 授权范围内用户资料 |
POST /oauth/revoke | 撤销单个 token |
POST /internal/admin/open-applications/{appId}/revoke | 平台撤销应用授权(内部管理) |
scope 说明(最小授权)
| scope | 说明 |
|---|---|
profile.basic | 昵称 / 头像 |
profile.phone | 手机号(脱敏) |
notify | 站内信 / 推送(预留 Reserved) |
用户同步
- 拉取(Pull):GET /oauth/userinfo(授权范围内)。
- 订阅(Subscribe):UserProfileChanged 事件(topic 见 OpenAPI / AsyncAPI 契约)。
- 同步内容仅限授权范围(昵称 / 头像 / 手机号脱敏);不共享 IM 聊天 / 好友 / 群组数据。
- 解绑 / 撤销:第三方业务数据保留,仅移除 IM 登录 / 触达方式。
安全规范
- appSecret 仅以不可逆哈希保存,不落明文,只在审核通过或重置时返回一次。
- scope 最小授权 + 授权版本;撤销 / 解绑即失效。
- 审计:授权 / 撤销 / 同步 / 触达均记审计;日志脱敏。
服务板块接入(小程序服务项)
打车、外卖、电商、本地生活等外部服务,若只需在 C 端「服务板块」展示入口并跳转(无需 OAuth 账号授权),走更轻量的「服务项(小程序)」接入。
C 端入口链路
App 头部 A380 板块 → 服务页(服务板块)→ 服务类型分组 → 服务项(小程序),点击跳转小程序 / H5 / 自定义 scheme。
服务项字段
| 字段 | 说明 |
|---|---|
typeId | 所属服务类型 id |
name | 服务项名称(如「打车」) |
link | 跳转地址:小程序路径 / H5 URL / 自定义 scheme |
introduction | 服务介绍(选填) |
icon | 服务图标(媒体 objectId,选填) |
status | 发布状态:1=已发布(C 端可见)/ 0=停用 |
isTop | 是否置顶 |
sortOrder | 排序值 |
C 端公开读接口
- GET /api/v1/miniapp/services:公开接口,只返回已发布(status=true)服务项,按类型分组、置顶优先。
- 启用 / 停用由后台「服务项管理」完成(status 字段),不删除记录。
打车接入示例
- 管理员在后台建 / 复用服务类型,再登记服务项「打车」。
- 填写 name / link(打车小程序或 H5)/ introduction / icon,status=1 发布。
- C 端头部 A380 板块 → 服务页验证入口与跳转。
- 如需 IM 账号互通 / 用户同步,再叠加上方 OAuth 开放平台接入。
验收清单
- 模拟第三方系统按 5 步流程完成授权 / 同步 / 业务打通 / 撤销全链路。
- appSecret 不落明文;撤销后 token / userinfo / 事件均失效。
- 第三方系统在 IM 不可用时仍独立闭环运行。
SDK 与示例:
SDK 与接入示例将在开放平台上线时提供下载;当前可参考仓库内接入文档。