IM 开放平台 · 第三方接入

任何第三方业务系统(SaaS / 打车 / 电商 / 本地生活等)按标准 5 步流程接入 IM,即可打通入口、身份授权与用户触达;第三方系统保有独立业务闭环、脱离 IM 也能完整运行。

标准接入流程(5 步)

1

应用注册

在 IM 开放平台提交应用信息、回调域名与申请 scope,等待平台审核。

2

发放凭证

审核通过后发放 appId + appSecret,登记 scope(应用级授权)。

3

用户授权

引导用户 OAuth 授权指定 scope(用户级授权)。

4

用户同步

OAuth userinfo 拉取 + UserProfileChanged 事件订阅(授权范围内)。

5

业务打通

第三方用自身业务闭环,经 IM 入口/消息触达用户;解绑/撤销即断开。

应用信息

字段说明
appId平台审核通过后发放的唯一应用标识
appName应用名称
callbackUrlOAuth 回调地址(HTTPS)
appType应用类型
scope申请的授权范围(最小授权)
statusPENDING / APPROVED / SUSPENDED

授权流程

OAuth 2.0 Authorization Code + PKCE,两层授权:

  • 应用级授权(接入即授权):应用审核通过即获得 appId + appSecret,并登记 scope。
  • 用户级授权(OAuth):第三方引导用户授权指定 scope。

时序

  1. 1第三方 AppIM
    GET /oauth/authorize?appId&scope&redirect_uri&code_challenge&code_challenge_method=S256
  2. 2IM用户
    展示授权页,用户确认
  3. 3用户IM
    用户确认,重定向 redirect_uri?code=...
  4. 4第三方 AppIM
    POST /oauth/token(code + PKCE verifier)
  5. 5IM第三方 App
    返回 access_token / refresh_token / expires_in
  6. 6第三方 AppIM
    GET /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。

时序

  1. 1IM App(容器)WebView
    注入 window.GVBridge.login({ appId, scope, redirectUri })
  2. 2第三方 H5IM App
    GVBridge.login()(App 原生用自身 JWT 调 /oauth/authorize 拿 code)
  3. 3IM App第三方 H5
    返回 { code, code_verifier, redirect_uri }
  4. 4第三方 H5第三方后端
    POST /api/v1/identity/oauth/im/callback(code + verifier + app_id)→ SaaS accessToken + accountId
  5. 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/tokencode 换 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 与接入示例将在开放平台上线时提供下载;当前可参考仓库内接入文档。