OpenID 标识某个微信用户在指定公众号下的身份。CRM 发送通知时,openId 是通知接收人,例如跟进负责人或管理人员的微信身份;customerName 等字段则是 CRM 中的客户资料。
在微信中获取
- 使用希望接收通知的微信账号,打开获取我的 OpenID。
- 核对页面展示的公众号名称。
- 点击“获取我的 OpenID”,微信授权完成后自动返回页面。
- 点击“复制 OpenID”,将该值交给 CRM 管理员或保存到对应员工账号的配置中。
https://openid.xianboss.com/?channel=xianbao
普通浏览器会显示“请在微信内打开”的引导。登录某个网站或微信网页版,不等于在微信内完成该公众号网页授权。切换微信账号后,请再次点击获取,避免沿用此前会话中显示的身份。
在 CRM 中使用
CRM 可以把员工账号与其 OpenID 关联,再根据客户负责人选择通知接收人。该关联由 CRM 保存;PushMsg 接收的是已经确定的 openId,不会解析 CRM 内部的员工 ID。
{
"requestId": "crm-followup-EVENT001",
"openId": "YOUR_RECEIVER_OPENID",
"customerName": "测试客户",
"customerType": "潜在客户",
"customerSource": "CRM录入",
"customerPhone": "13800000000",
"markedAt": "2026-10-26 11:00"
}
提交地址和字段限制见CRM 推送接口。OpenID 不同于 API Key:前者指定接收人,Key + Secret 证明调用系统身份。管理员还需在该系统下为对应通道添加并启用此 OpenID;获取 OpenID 或仅在 CRM 内绑定账号不会自动授予 PushMsg 推送权限。
获取流程的边界
页面使用 snsapi_base 获取 OpenID,不读取微信密码、聊天记录或通讯录。获取 OpenID 本身不代表用户已关注公众号,也不等于获得所有消息类型的发送资格。
普通模板消息和客服文本分别由微信校验其接收条件。网页授权不能代替客服消息所需的用户互动;一次性订阅等能力还需要其各自的授权流程。
公众号与服务端配置
| 配置 | 当前值或要求 |
|---|---|
| 网页授权域名 | openid.xianboss.com |
| 服务端公开地址 | PUSHMSG_PUBLIC_BASE_URL=https://openid.xianboss.com |
| 页面目录 | /www/wwwroot/openid.xianboss.com |
| 授权后端 | 现有 PushMsg Java 服务,经 Nginx 反向代理 |
| 访问鉴权 | 页面不要求管理员密钥或业务 API Key |
公开地址必须是 HTTPS 域名原点,不接受 IP、端口、路径或查询参数。域名与公众号后台配置应一致,域名验证文件按平台要求放置。配置步骤见微信公众号配置。
会话与有效期
- 授权状态使用随机值,绑定当前浏览器会话和公众号,10 分钟内一次性使用。
- 回调在换取 OpenID 前消费状态,重复或伪造回调会被拒绝。
- 成功获取后轮换会话 ID,结果保存在当前浏览器对应的服务端会话中,15 分钟过期。
- Cookie 使用
HttpOnly、Secure、SameSite=Lax;授权成功后跳转到不含授权 code 或 OpenID 的页面地址。 - 页面仅展示当前会话的结果,公开查询接口不提供其他用户的 OpenID 列表。
服务重启或会话过期后,重新点击获取即可。不要把页面中复制的 OpenID 当作可跨公众号使用的通用微信账号。
常见提示
| 提示 | 处理方式 |
|---|---|
| 请在微信内打开 | 将链接发到微信聊天中,从微信中打开 |
| 等待配置网页授权域名 | 检查 PUSHMSG_PUBLIC_BASE_URL 与公众号网页授权域名 |
| 授权会话已失效 | 返回页面,重新点击获取,不重复刷新旧回调链接 |
| 授权域名不一致 | 检查公众号后台所填域名是否与实际回调域名一致 |
| 页面已获取,但推送失败 | 查看消息的 lastError,按微信消息接口的错误码处理 |
更多状态与错误处理见问题排查。