接口文档
第三方网站对接本平台 QQ 快捷登录的完整说明
1快速开始
前置条件:登录本平台后,在首页获取您的 App ID 和 App Secret。
1
发起登录
用户点击 QQ 登录 → 重定向到本站 login.php(带签名)
2
授权回调
用户在 QQ 授权完成 → 本站回调地址接收授权 → 跳转回您的网站并附带 token
3
换取用户信息
您的服务器用 token 调用 exchange_token 接口 → 获取 QQ 用户信息(含 qq_openid)
4
随时查询(可选)
凭 qq_openid 调用 query_user 接口 → 获取用户最新资料,无需重新登录
2对接凭据
| 字段 | 说明 | 示例 |
App ID |
应用唯一标识,公开 |
a1b2c3d4e5f60789 |
App Secret |
签名密钥,仅保存在服务器端,切勿泄露到前端 |
•••••••••••••••••••••••••••••••• |
对接回调说明:您自己网站的一个 URL(如 https://your-site.com/qq_callback.php),用于接收本平台登录成功后跳转回来的 token。通过 cross_site 参数动态传入,无需预先在本平台登记。
3签名机制
所有需要鉴权的接口,必须同时传递以下参数并生成签名。
| 参数 | 类型 | 必填 | 说明 |
app_id | string | 是 | 您的 App ID |
timestamp | int | 是 | 当前 Unix 时间戳(秒),允许 ±5 分钟偏差 |
nonce | string | 是 | 随机字符串(推荐 16-32 位),每次请求唯一,防重放 |
sign | string | 是 | HMAC-SHA256 签名(hex 小写,64 位) |
签名步骤
- 收集所有业务参数(
app_id、timestamp、nonce 以及接口自身的其他参数,不含 sign),过滤掉空值。
- 按参数名字典序排序。
- 拼成
key1=urlencode(value1)&key2=urlencode(value2) 格式(rawurlencode)。
- 使用
App Secret 作为 key,对拼接串做 HMAC-SHA256,输出小写 hex。
签名示例(PHP)
// 1. 准备参数
$params = [
'app_id' => 'a1b2c3d4e5f60789',
'cross_site' => 'https://your-site.com/callback',
'timestamp' => time(),
'nonce' => bin2hex(random_bytes(16)),
];
// 2. 过滤空值 + 字典序排序
$params = array_filter($params, fn($v) => $v !== '' && $v !== null);
ksort($params);
// 3. 拼接(rawurlencode)
$parts = [];
foreach ($params as $k => $v) {
$parts[] = $k . '=' . rawurlencode((string)$v);
}
$signStr = implode('&', $parts);
// 4. HMAC-SHA256
$appSecret = '你的AppSecret';
$sign = hash_hmac('sha256', $signStr, $appSecret);
// 5. 最终请求携带 sign
$params['sign'] = $sign;
4在线调试
在浏览器端本地生成签名与登录链接,App Secret 不会上传到服务器,仅用于本地计算签名。
生成结果
timestamp
-
nonce
-
sign
-
签名串(用于校验)
-
说明:点击「生成签名」会在浏览器本地用 HMAC-SHA256 计算签名,并拼出完整的 login.php 跳转链接。点击链接会真实发起 QQ 授权流程,授权完成后会带 token 跳转到您填写的回调 URL。
5接口一:发起登录跳转
GET
https://i.0ic.cc/login.php
请求参数
| 参数 | 类型 | 必填 | 说明 |
cross_site | string | 是 | 您的回调 URL,登录成功后本站重定向到此地址并附带 token |
app_id | string | 是 | App ID |
timestamp | int | 是 | Unix 时间戳 |
nonce | string | 是 | 随机串 |
sign | string | 是 | HMAC 签名(参与签名参数为:app_id、cross_site、timestamp、nonce) |
回调返回(重定向到您的 cross_site)
https://your-site.com/callback?token=2f8e3b...&from=qq_login_api
重要:必须携带 cross_site 参数才会进入跨站对接模式,否则会按本站登录流程处理(返回首页)。
6接口二:Token 交换用户信息
GET
https://i.0ic.cc/api.php?action=exchange_token
拿到 token 后,您的服务器端调用此接口换取 QQ 用户信息。
请求参数
| 参数 | 类型 | 必填 | 说明 |
token | string | 是 | 从回调 URL 获取的登录令牌 |
app_id | string | 是 | App ID |
timestamp | int | 是 | Unix 时间戳 |
nonce | string | 是 | 随机串 |
sign | string | 是 | HMAC 签名(参与签名参数为:app_id、token、timestamp、nonce) |
响应示例
{
"code": 200,
"message": "Token验证成功",
"data": {
"is_login": true,
"user": {
"id": 128,
"nickname": "小明",
"avatar": "https://thirdqq.qlogo.cn/.../100",
"gender": 1,
"qq_openid": "A1B2C3D4E5F6..."
}
},
"timestamp": 1722585600
}
错误码
| code | 说明 |
200 | 成功 |
400 | 缺少 token 参数 |
401 | 缺少 app_id / app_id 无效 / 签名校验失败 |
403 | 应用已被禁用 |
500 | 服务器异常(message 含错误详情) |
7接口三:查询用户信息
GET
https://i.0ic.cc/api.php?action=query_user
第三方在用户登录后任意时间,通过 qq_openid 主动查询用户最新信息。本接口不消耗 token,可反复调用。
请求参数
| 参数 | 类型 | 必填 | 说明 |
qq_openid | string | 是 | 用户在本平台的唯一标识(登录时由 exchange_token 返回) |
app_id | string | 是 | App ID |
timestamp | int | 是 | Unix 时间戳 |
nonce | string | 是 | 随机串 |
sign | string | 是 | HMAC 签名(参与签名参数为:app_id、qq_openid、timestamp、nonce) |
响应示例
{
"code": 200,
"message": "查询成功",
"data": {
"user": {
"id": 128,
"nickname": "小明",
"avatar": "https://thirdqq.qlogo.cn/.../100",
"gender": 1,
"qq_openid": "A1B2C3D4E5F6...",
"last_login_time": "2026-08-02 10:23:45"
}
},
"timestamp": 1722585600
}
错误码
| code | 说明 |
200 | 查询成功 |
400 | 缺少 qq_openid 参数 |
401 | 缺少 app_id / app_id 无效 / 签名校验失败 |
403 | 应用已被禁用 |
500 | 用户不存在或服务器异常(message 含错误详情) |
使用场景:用户首次登录后已拿到 qq_openid,后续需要获取最新昵称/头像(例如用户在 QQ 端修改了资料)时,可直接调用本接口刷新,无需让用户重新走登录流程。
8通用响应结构
所有 api.php 接口返回统一的 JSON 结构:
{
"code": 200,
"message": "说明文本",
"data": { /* 业务数据 */ },
"timestamp": 1722585600
}
9辅助接口
| 方法 | URL | 说明 |
| GET |
/api.php?action=check_login |
检查本站 Cookie 会话登录状态 |
| GET |
/api.php?action=get_user_info |
获取本站会话下当前用户详情(需已登录) |
| GET |
/api.php?action=get_auth_url |
获取 QQ 授权 URL,参数可选 state、redirect(跨站回调) |
| POST |
/api.php?action=logout |
退出本站会话 |
| GET |
/api.php |
接口总览,返回服务状态与端点列表 |