OPENID
03
获取用户 Openid
在微信内置浏览器中通过网页授权静默获取用户 Openid,全程无需签名,系统自动处理授权流程。
调用流程
无需关注具体获取过程,系统自动处理:商户引导浏览器跳转接口地址,平台 302 至微信网页授权,静默授权后自动携带 openid 回跳至 callback_url。
请求参数
| 字段名称 | 变量名 | 必填 | 类型 | 描述 |
|---|---|---|---|---|
| 商户号 | mchid | 是 | String(32) | |
| 回调地址 | callback_url | 是 | String | 接收 openid 的 url,必须为 HTTPS 地址,域名需在商户后台「授权域名」中已添加,不能带 session 验证、csrf 验证 |
回跳参数
授权完成后,微信浏览器会自动跳转至 callback_url,并附加以下参数:
| 字段名称 | 变量名 | 类型 | 描述 |
|---|---|---|---|
| 用户 Openid | openid | String | 用户在此公众号下的唯一标识,成功时返回 |
| 错误信息 | openid_error | String | 仅获取失败时返回,可能值:network_error(网络异常)、auth_failed(微信授权失败) |
请求示例
假如需要接收 openid 的 url 是:
https://www.example.com/abc?uid=32
则直接通过浏览器跳转该 url 即可:
https://api.alldaypay.cn/api/openid?mchid=1006&callback_url=https://www.example.com/abc?uid=32
完成 openid 获取后,微信浏览器会自动跳转至:
https://www.example.com/abc?uid=32&openid=oXXXXXXXXXXXXXXXXX
回调域名要求
- 必须为 HTTPS 协议,不支持 HTTP 和 IP 地址
- 域名必须在商户后台「授权域名」中已添加,支持通配符(如
*.example.com同时匹配裸域和子域名) - 不能使用平台自身域名(如
api.alldaypay.cn)作为回调 - 删除授权域名后立即生效,无缓存延迟
限制说明
- 限流:同一商户号 + IP 每分钟最多 60 次请求
- state 有效期 120 秒,超时需重新发起
- 商户状态必须为正常(status=1),禁用商户无法调用
注意:该接口不能在小程序中直接使用;不能在微信开发者工具里调试,需真机调试。callback_url 必须是 HTTPS 且域名已授权,请确保该地址可公网直接访问。
提示:该 openid 具备唯一性,可做映射关系存储在本地数据库,例如建表
user_openid(uid, openid, mchid, created_at),以「商户号 + openid」为唯一键关联用户。