OAuth 聚合登录接口接入指南 · 快速上手
次元聚合登录 是一款社会化账号聚合登录系统,基于 OAuth2.0 协议,为网站提供统一、便捷的第三方登录服务。开发者只需简单的几步操作,即可在自己的网站上集成 QQ、微信、支付宝、微博、GitHub 等多种第三方登录方式。
核心优势:
前提条件:
目前支持以下第三方登录平台,各平台对应的 type 参数值:
| type 值 | 平台名称 | type 值 | 平台名称 |
|---|---|---|---|
qq | QQ | feishu | 飞书 |
wx | 微信 | dingtalk | 钉钉 |
wxgzh | 公众号 | gitee | Gitee |
alipay | 支付宝 | github | GitHub |
sina | 微博 | oschina | 开源中国 |
baidu | 百度 | aliyun | 阿里云 |
douyin | 抖音 | nanako | Nanako |
huawei | 华为 | kuaishou | 快手 |
xiaomi | 小米 | gitcode | GitCode |
google | 谷歌 | gitea | Gitea |
各平台是否可用取决于管理员是否在后台开启并配置了对应的密钥。微信(wx)和支付宝(alipay)额外支持扫码登录模式。
只需 4 步即可完成第三方登录接入:
1. 注册并创建应用 — 访问用户中心注册账号,进入应用管理创建您的应用,获取 AppID 和 AppKey。
2. 配置回调地址 — 在应用设置中填写您网站的回调地址,并添加授权域名。
3. 发起登录请求 — 在您的网站登录页面,通过 API 获取登录跳转地址。
4. 处理回调并获取用户信息 — 用户授权后,通过回调接口直接获取用户信息。
<?php
$appid = '您的AppID';
$appkey = '您的AppKey';
$callback = 'https://yourdomain.com/callback.php';
$loginUrl = "https://www.uzm.cc/connect.php?act=login&appid={$appid}&appkey={$appkey}&type=qq&redirect_uri=" . urlencode($callback);
$result = json_decode(file_get_contents($loginUrl), true);
if ($result['code'] == 0) {
header('Location: ' . $result['url']); exit;
} else { echo '登录发起失败:' . $result['msg']; }
?>
<?php
$appid = '您的AppID'; $appkey = '您的AppKey';
if (isset($_GET['type']) && isset($_GET['code'])) {
$type = $_GET['type']; $code = $_GET['code'];
$apiUrl = "https://www.uzm.cc/connect.php?act=callback&appid={$appid}&appkey={$appkey}&type={$type}&code={$code}";
$data = json_decode(file_get_contents($apiUrl), true);
if ($data['code'] == 2) { echo '登录尚未完成,请稍后...'; }
elseif ($data['code'] == 0) {
echo '用户昵称:' . $data['nickname'];
echo '唯一标识:' . $data['social_uid'];
} else { echo '登录失败:' . $data['msg']; }
}
?>
回调地址(Redirect URI)是用户完成第三方平台授权后,系统将用户重定向回您网站的地址。
注意事项:
http:// 或 https:// 开头回调参数:
| 参数 | 类型 | 必返回 | 说明 |
|---|---|---|---|
type | String | 是 | 登录类型,如 qq、wx、alipay 等 |
code | String | 是 | 授权码,用于获取用户信息 |
state | String | 否 | 自定义状态参数,原样返回 |
回调示例:https://yourdomain.com/callback.php?type=qq&code=520DD95263C1CFEA0870&state=xxx
通过此接口获取第三方平台的登录跳转地址。
请求地址: GET https://www.uzm.cc/connect.php?act=login
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
act | String | 是 | 固定值:login |
appid | String | 是 | 应用的 AppID |
appkey | String | 是 | 应用的 AppKey(请勿在前端暴露) |
type | String | 是 | 登录类型:qq、wx、alipay 等 |
redirect_uri | String | 是 | 授权回调地址,需 URL 编码 |
state | String | 否 | 自定义状态参数,防止 CSRF |
成功返回:
{
"code": 0,
"msg": "succ",
"type": "qq",
"url": "https://graph.qq.com/oauth2.0/authorize?..."
}
微信和支付宝登录时,还会额外返回 qrcode 字段用于扫码登录。
用户授权后,使用 code 直接换取用户信息,一步即可拿到完整用户数据。
请求地址: GET https://www.uzm.cc/connect.php?act=callback
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
act | String | 是 | 固定值:callback |
appid | String | 是 | 应用的 AppID |
appkey | String | 是 | 应用的 AppKey |
type | String | 是 | 登录方式 |
code | String | 是 | 回调时收到的授权码 |
成功返回:
{
"code": 0,
"msg": "succ",
"type": "qq",
"access_token": "89DC9691...",
"social_uid": "AD3F5033...",
"faceimg": "https://thirdqq.qlogo.cn/...",
"nickname": "用户昵称",
"location": "北京市",
"gender": "男",
"ip": "1.12.3.40"
}
返回 code: 2 表示用户尚未完成授权,建议间隔 2 秒后重试。
| 参数 | 说明 |
|---|---|
social_uid | 第三方用户唯一标识(请以此字段绑定用户) |
nickname | 用户昵称 |
faceimg | 用户头像 URL |
gender | 用户性别 |
location | 用户所在地(部分平台返回) |
ip | 用户登录 IP |
登录后的任意时间,可使用此接口再次查询用户详细信息。
请求地址: GET https://www.uzm.cc/connect.php?act=query
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
act | String | 是 | 固定值:query |
appid | String | 是 | 应用的 AppID |
appkey | String | 是 | 应用的 AppKey |
type | String | 是 | 登录方式 |
social_uid | String | 是 | 第三方用户唯一标识 |
| code | errcode | 说明 | 解决方案 |
|---|---|---|---|
0 | - | 请求成功 | - |
2 | - | 用户尚未完成登录 | 间隔 2 秒后重新请求回调接口 |
-1 | 101 | 缺少必要参数 | 检查必填参数是否传递 |
-1 | 102 | 应用不存在/已关闭/审核中 | 检查 AppID,确认应用状态 |
-1 | 103 | AppKey不正确/回调域名未授权 | 检查 AppKey,添加回调授权域名 |
-1 | 104 | 登录方式未开启或未配置 | 确认该登录方式已启用 |
-1 | 201 | 数据库错误 | 联系管理员排查 |
-1 | 301 | 第三方平台返回错误 | 查看 msg,检查第三方密钥配置 |
1. 使用 cURL 替代 file_get_contents — 支持超时控制、SSL 验证等:
function httpGet($url, $timeout = 10) {
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => $timeout,
CURLOPT_SSL_VERIFYPEER => true,
CURLOPT_FOLLOWLOCATION => true,
]);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
2. 轮询策略优化 — 收到 code=2 时使用递增间隔轮询:
$maxRetry = 15;
$intervals = [2,2,2,3,3,3,5,5,5,5,5,8,8,8,10];
for ($i = 0; $i < $maxRetry; $i++) {
$data = httpGet($apiUrl);
if ($data['code'] == 0) break;
elseif ($data['code'] == 2) { sleep($intervals[$i]); continue; }
else die('登录失败: ' . $data['msg']);
}
3. 用户绑定建议 — 使用 type + social_uid 组合键作为唯一标识。
PHP SDK 版本:1.0