开发前必读

开发帮助 更新于 2026-09-21 阅读 11

阅读指引:本篇汇总开发前必须理解的核心概念与约束:部署形态、凭据体系、权限模型、标识与时间约定、限流与安全红线。理解本文后再进入具体接口文档,可避免绝大多数联调问题。

部署与接入形态

莲信以私有化部署为主,HTTP 接口须使用平台交付的服务地址,JSAPI 须运行在平台提供的兼容客户端与 SDK 中。文档中的 {OPENAPI_BASE_URL} 均为占位符,实际基础地址为 {OPENAPI_BASE_URL}/openapi/v1(例如 https://openapi.example.com/openapi/v1),以管理员交付的接入信息为准。

应用取得凭据及 Scope 后,还须满足各接口的授权、发布范围、群绑定或客户端条件。

凭据体系

凭据 可见性 用途与约束
app_identifier 应用开发者可见 应用全局稳定标识;不是 OAuth2 client_id
app_key 应用后端 / H5 可公开使用 OAuth2 client_id,公开选择器
app_secret 仅平台管理员和应用后端 OAuth2 client secret;严禁进入 H5、客户端包体或日志
sign_key 仅平台管理员和应用后端 Webhook 请求验签与验证响应签名;不参与 JSSDK config

重置 app_secret:每 7 天最多一次,会撤销该应用全部应用 Token 和用户 Token。轮换时应先暂停应用后端的换 Token 和刷新请求,配置新密钥后再恢复,并丢弃所有使用旧密钥发起的请求结果。

重置 sign_key:每 10 分钟最多一次,不撤销 OAuth2 Token。切换后须使用新密钥处理 Webhook 并重新验证回调;原群同步游标失效,需重新全量同步群与成员。

三类访问凭证

凭证 代表身份 获取方式 典型用途
应用 Token 应用自身 client_credentials 换取 素材、消息、组织、群、jsapi_ticket 等接口
用户 Token 应用 + 当前授权用户 authorization code 换取(含 JSSDK getAuthCode 用户资料、代发消息
jsapi_ticket 应用级签名密钥 应用 Token 调 POST /jssdk/ticket H5 计算 JSSDK config 签名

三者有效期均以响应 expires_in 为准并须缓存复用;jsapi_ticket 与 access_token 只能保存在应用后端。

权限模型

应用能否做一件事,由三层相互独立的配置共同决定,不能互相替代:

模型 回答的问题 谁配置
能力 Scope 应用能做什么(如读取组织、发送用户消息) 管理员授权;用户授权型能力还需用户同意
用户 OAuth2 授权 当前用户同意了哪些需要用户授权的 Scope 用户
应用发布范围 谁能使用应用;应用能读取或触达哪些用户与组织 管理员

常用 Scope 一览(完整表见《用户授权 OAuth2》):

Scope 类型
user:profile:read 需要用户授权
material:manage 应用能力,默认授权
message:send:user 应用能力,默认授权
contact:organization:read 应用能力,需管理员授权
message:send:org_node / message:send:all 应用能力,需管理员授权
chat:conversation:choose 应用能力,默认授权(JSAPI,需 config)
chat:conversation:open 应用能力,需管理员授权(JSAPI,需 config)
group:app 应用能力,需管理员授权,且群主/管理员把应用添加进群
message:delegate:send 需要用户授权

权限变更后既有 access token 和 refresh token 被撤销,应用必须重新认证。应用不能根据 Scope 名称猜测接口,以文档公开入口和应用实际获授能力为准。

标识与时间约定

  • 组织、群、用户 ID 在 JSON 中一律是十进制字符串。不要转换成 JavaScript Number,避免精度丢失;Token、游标、media_id、会话 ID 等按不透明字符串保存和使用,不要解析、修改或自行拼装。
  • expires_inrefresh_expires_in 等相对有效期单位为profile.avatar.expires_at 为 Unix 秒;Webhook 事件时间与 JSSDK config 的 timestamp 为 Unix 毫秒。
  • OAuth2 Token 成功响应是顶层字段(无 code/data 包络),错误为 OAuth error 对象;其余多数接口成功响应为 code/message/data/request_id,业务判断以 code 为准,HTTP 200 不一定代表成功。

限流

  • 所有 /openapi/v1/* 请求共享来源 IP 每分钟 300 次的全局固定窗口限制;命中时返回 HTTP 200、业务码 170108
  • 发送类接口另有每应用 + 来源 IP 每分钟 60 次的专用限额,同样返回 170108;素材上传的专用限流返回 HTTP 429、170507
  • 遇到限流按对应窗口退避重试,不要紧密循环重试,也不要通过切换连接或地址规避限制。

安全红线

  • app_secretsign_keyjsapi_ticket、access_token、refresh_token 不进入普通日志、埋点、前端持久缓存或客户端包体;authorization code 只在应用后端短期、一次性使用。
  • 应用后端使用 HTTPS;OAuth2 流程必须校验 state,并精确复用登记的 redirect_uri
  • JSSDK 签名只能在应用后端计算,签名用的页面 URL 与调用 config 的页面 URL 必须完全一致(去掉 # 及其后部分)。
  • 头像等短期 URL 不要当成永久资源地址,过期后重新获取。
  • 卡片消息中的跳转与封面 URL 只能由应用后端从允许名单生成,不直接接受终端用户提交的任意 URL。
  • 收到 Webhook 后先验签、按 event_id 幂等,再执行业务;普通文件附件可能包含不可信内容,不要自动执行、解压或以内联 HTML 展示。

完整安全清单见《Scope 映射与错误处理》。