概述
所有 API 请求都使用 https,请求/响应均使用 UTF-8 编码,响应格式为 JSON。
通用响应格式
{
"code": 0, // 0=成功,其他=失败
"msg": "succ", // 消息描述
"data": { ... } // 业务数据(可选)
}
通用错误响应
{
"code": -1,
"errcode": 500,
"msg": "服务异常"
}
GETact=login OAuth
获取扫码登录 URL,返回 JSON。客户端拿到 url 后跳转或嵌入 iframe。
请求参数
| 参数 | 必填 | 说明 |
|---|---|---|
act |
是 | 固定为 login |
appid |
是 | 应用 ID |
appkey |
是 | 应用密钥 |
type |
是 | 登录方式:wx/qq/alipay/douyin/baidu |
redirect_uri |
是 | 回调地址(https) |
state |
否 | 业务方自定义 state,用于防 CSRF |
示例请求
GET /um/connect.php?act=login&appid=1012&appkey=xxx&type=wx&redirect_uri=https://example.com/cb&state=abc
成功响应
{
"code": 0,
"msg": "succ",
"type": "wx",
"url": "https://open.weixin.qq.com/connect/qrconnect?appid=...&redirect_uri=...&state=...#wechat_redirect",
"qrcode": "https://open.weixin.qq.com/connect/qrconnect?...&client=1"
}
url 是微信跳转地址,qrcode 是 PC 端二维码版本(URL 末尾带 client=1)。
GETact=callback OAuth
用授权码 code 换取用户信息。客户端拿到 code 后调用此接口。
请求参数
| 参数 | 必填 | 说明 |
|---|---|---|
act |
是 | 固定为 callback |
appid |
是 | 应用 ID |
appkey |
是 | 应用密钥 |
code |
是 | 从 redirect_uri 拿到的授权码(一次性) |
成功响应
{
"code": 0,
"msg": "succ",
"type": "wx",
"access_token": "ACCESS_TOKEN",
"social_uid": "OPENID",
"faceimg": "https://thirdqq.qlogo.cn/...",
"nickname": "微信昵称",
"gender": "男",
"location": "广东 深圳",
"ip": "1.2.3.4"
}
特殊响应:等待扫码
{"code": 2, "msg": "待用户扫码确认"}
用户还没扫码确认,可在前端轮询直到 code=0。
GETact=query
通过 social_uid 查询已绑定的第三方用户信息(用于二次访问)。
请求参数
| 参数 | 必填 | 说明 |
|---|---|---|
act |
是 | 固定为 query |
appid |
是 | 应用 ID |
appkey |
是 | 应用密钥 |
type |
是 | 登录方式 |
social_uid |
是 | 用户 openid |
POSTuser_register
注册新用户(通过手机号 / 邮箱)。
请求参数(JSON 或 form)
| 参数 | 必填 | 说明 |
|---|---|---|
appid |
是 | 应用 ID |
username |
否 | 用户名 |
password |
是 | 密码(明文,HTTPS 传输) |
phone |
二选一 | 手机号 |
email |
二选一 | 邮箱 |
code |
条件 | 短信/邮箱验证码(开启了验证时必填) |
响应
{
"code": 0,
"msg": "注册成功",
"data": {
"user_id": 10086,
"token": "eyJ0eXAiOiJKV1Qi..."
}
}
POSTuser_login
账号密码登录。
请求参数
| 参数 | 必填 | 说明 |
|---|---|---|
appid |
是 | 应用 ID |
phone 或 email 或 username |
是 | 账号 |
password |
是 | 密码 |
响应
{
"code": 0,
"msg": "登录成功",
"data": {
"user_id": 10086,
"token": "eyJ0eXAi...",
"user": {
"id": 10086,
"username": "demo",
"phone": "13800138000",
"avatar": "https://..."
}
}
}
POSTuser_info
查询 / 更新用户信息(需登录态 Token)。
请求头
Authorization: Bearer {token}
请求参数
| 参数 | 必填 | 说明 |
|---|---|---|
act |
是 | get / update / change_pwd |
appid |
是 | 应用 ID |
示例:获取信息
POST /um/user_info.php?act=get&appid=1012
Authorization: Bearer eyJ0eXAi...
Authorization: Bearer eyJ0eXAi...
{
"code": 0,
"data": {
"id": 10086,
"username": "demo",
"phone": "13800138000",
"email": "",
"avatar": "https://...",
"nickname": "演示账号",
"gender": "男",
"status": 1
}
}
POSTuser_logout
登出(让 token 失效)。
请求头
Authorization: Bearer {token}
响应
{"code": 0, "msg": "已登出"}
GETact=check_sso v1.1
检测用户是否已在 SSO 中心登录。已登录则直接返回 Token 与用户信息,用于跨应用自动登录。
请求参数
| 参数 | 必填 | 说明 |
|---|---|---|
act |
是 | 固定为 check_sso |
appid |
是 | 应用 ID |
appkey |
是 | 应用密钥 |
示例
GET /um/connect.php?act=check_sso&appid=1012&appkey=xxx
已登录响应
{
"code": 0,
"logged_in": true,
"token": "eyJ0eXAiOiJKV1Qi...",
"scope": "yunjii",
"scope_type": "group",
"user": {
"id": 10086,
"nickname": "演示",
"avatar": "https://..."
}
}
未登录响应
{"code": 0, "logged_in": false}
完整策略系统设计见 📘 完整策略系统文档。
POSTact=sso_logout v1.1
SSO 统一登出:清除当前作用域(global / group / app)内所有 Token。
请求头
Authorization: Bearer {token}
请求参数
| 参数 | 必填 | 说明 |
|---|---|---|
act |
是 | 固定为 sso_logout |
响应
{"code": 0, "msg": "已登出", "killed": 3}
killed 表示本次共清除的 Token 数量。
GETact=policy v1.1
查询应用当前生效的登录策略与所有可配置项。供前端 SDK 动态获取。
请求参数
| 参数 | 必填 | 说明 |
|---|---|---|
act |
是 | 固定为 policy |
appid |
是 | 应用 ID |
appkey |
是 | 应用密钥 |
响应
{
"code": 0,
"policy": "group_sso",
"group_key": "yunjii",
"all_options": {
"multi_device.max_devices": 0,
"login.max_attempts": 5,
"ip_bound.change_action": "kick",
"ip_bound.check_interval": 60,
"single_device.kick_mode": "kick_old",
"login.allow_simultaneous": true,
"login.password_min_length": 6
}
}
错误码
| code | errcode | 说明 |
|---|---|---|
| 0 | 0 | 成功 |
| 2 | - | 待用户扫码确认(轮询场景) |
| -1 | 101 | 参数缺失 |
| -1 | 102 | 应用不存在/已关闭/审核中/未通过 |
| -1 | 103 | appkey 不正确/回调域名未授权 |
| -1 | 104 | 登录方式未配置/未开启 |
| -1 | 201 | 数据库错误 |
| -1 | 301 | 第三方 API 调用异常 |
| -1 | 401 | 未登录/token 失效 |
| -1 | 403 | 账号已禁用 |
| -1 | 500 | 服务异常 |
| -1 | 601 | SSO 作用域无效 |
| -1 | 602 | 超出最大设备数限制 |
| -1 | 603 | IP 绑定校验失败 |
| -1 | 701 | B 端无权限修改该配置项 |
更新日志
v1.1 (2026-06-09) NEW
- 分组与策略系统:6 大登录策略(独立/分组SSO/全局SSO/单设备/多设备/IP绑定)
- 三级权限模型:超管 / 客户 / B 端商家(商家/加盟商/代理商)/ C 端用户
- 灵活配置中心:27+ 项可配置项全部注册化,新增策略无需改代码
- Token 多实例:v1/v2 兼容,按 scope(global/group/app)维度管理
- 设备指纹:基于 UA+IP+Language,关联 um_user_device 表
- B 端控制台:
/um/b_console.php商家自主配置入口 - 3 个新 API:
act=check_sso/act=sso_logout/act=policy - 5 个新数据表:um_user_token / um_user_device / um_b_users / um_b_roles / um_perm_registry / um_config_override
- 详细设计见 📘 完整策略系统文档
v1.0 (2026-06-08)
- 首个正式版本
- 支持 OAuth 2.0 登录(微信/QQ/支付宝/抖音/百度)
- 支持用户账号体系(注册/登录/资料/Token)
- 兼容彩虹聚合登录协议,老项目零改造迁移