QQ聚合登录系统:开源免费的PHP快捷登录解决方案
QQ聚合登录系统:开源免费的PHP快捷登录解决方案
一套基于 PHP + MySQL 的 QQ 登录接入服务,让开发者跳过繁琐的 QQ 互联审核,5 分钟完成第三方登录集成。
源码下载:QQ快捷登录平台.zip
项目定位
这套系统解决的核心痛点:QQ 互联官方申请周期长、审核严、门槛高。通过自建聚合平台,开发者只需注册应用获取 AppID/AppKey,即可调用标准化 API 实现 QQ 一键登录,个人项目与商业项目均可使用。
项目采用 MIT 协议 完全开源,无功能阉割、无调用次数限制、无隐藏收费。
核心能力一览
| 维度 | 具体表现 |
|---|---|
| 接入效率 | 提供完整 SDK + 多语言示例,5 分钟完成对接 |
| 协议合规 | 标准 OAuth 2.0 授权流程,全程 HTTPS 加密传输 |
| 成本可控 | 零授权费用,零调用次数上限 |
| 数据可视 | 登录趋势、用户分布、应用调用量等报表 |
| 视觉体验 | Bootstrap 5 响应式布局,PC/移动端自适应 |
| 扩展友好 | 模块化分层架构,二次开发门槛低 |
| 安全基线 | 防 SQL 注入、XSS 过滤、CSRF Token 校验 |
界面与功能模块
前台门户
- 服务介绍与实时数据大屏
- 开发者文档与 SDK 下载
用户中心
- 应用生命周期管理(创建、配置、密钥重置)
- 登录日志追踪与 IP 分析
- 账户资料与通知设置
管理后台
- 开发者账户审核与权限管控
- 应用上架/下架/冻结
- 全局配置与运营报表导出
技术架构
┌─────────────────────────────────────────┐
│ 表现层 │ 首页 / 用户中心 / 管理后台 / API 文档 │
├─────────────────────────────────────────┤
│ 控制层 │ 登录接口 / 回调处理 / 用户管理 / 支付 │
├─────────────────────────────────────────┤
│ 业务层 │ 认证服务 / 用户服务 / 日志服务 / 缓存 │
├─────────────────────────────────────────┤
│ 数据层 │ MySQL 5.7+ / PDO / 数据库迁移工具 │
├─────────────────────────────────────────┤
│ 核心库 │ 数据库类 / 缓存类 / 支付类 / 工具函数 │
└─────────────────────────────────────────┘
技术栈细节
| 层级 | 选型 |
|---|---|
| 后端运行环境 | PHP ≥ 7.4,Composer 依赖管理 |
| 数据存储 | MySQL ≥ 5.7,utf8mb4 字符集 |
| 前端框架 | Bootstrap 5 + jQuery + Bootstrap Icons |
| 缓存策略 | 文件缓存(预留 Redis 扩展接口) |
| 通信协议 | OAuth 2.0 + RESTful API |
部署指南
环境前置检查
- PHP ≥ 7.4(需开启 curl、pdo_mysql 扩展)
- MySQL ≥ 5.7
- Nginx / Apache
- SSL 证书(生产环境强制要求)
三步安装
- 将源码解压至网站根目录
- 浏览器访问
http://你的域名/setup/进入图形化安装向导 - 填写数据库连接信息与管理后台初始账号,完成安装
Nginx 参考配置
server {
listen 80;
server_name your-domain.com;
root /var/www/qq-login-platform;
index index.php;
# 伪静态
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# PHP-FPM
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# 敏感目录禁止直接访问
location ~ ^/(core|setup)/.*\.(php|php5)$ {
deny all;
}
}
API 对接文档
通信规范
| 项 | 说明 |
|---|---|
| 传输协议 | HTTPS(生产环境必需) |
| 数据格式 | JSON |
| 字符编码 | UTF-8 |
| 请求方法 | GET / POST |
| 接口基地址 | https://your-domain.com/ |
前端集成示例
纯 HTML 跳转
<!-- QQ 登录按钮 -->
<a href="https://your-domain.com/connect.php?app_id=YOUR_APP_ID&return_url=YOUR_CALLBACK">
<img src="https://img.icons8.com/color/96/qq.png" alt="QQ登录" width="40">
QQ 一键登录
</a>
JavaScript 动态构造
function qqLogin() {
const params = new URLSearchParams({
app_id: 'YOUR_APP_ID',
return_url: window.location.origin + '/callback',
state: generateRandomString(16) // 防 CSRF
});
window.location.href = 'https://your-domain.com/connect.php?' + params;
}
function generateRandomString(len) {
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
return Array.from({length: len}, () =>
chars[Math.floor(Math.random() * chars.length)]
).join('');
}
PHP 完整 SDK 调用
<?php
class QQLoginSDK {
private $appId;
private $appKey;
private $apiUrl;
public function __construct($appId, $appKey, $apiUrl) {
$this->appId = $appId;
$this->appKey = $appKey;
$this->apiUrl = rtrim($apiUrl, '/') . '/';
}
/** 获取 QQ 授权跳转地址 */
public function getLoginUrl($redirectUri, $state = '') {
$params = [
'act' => 'login',
'appid' => $this->appId,
'appkey' => $this->appKey,
'type' => 'qq',
'redirect_uri' => $redirectUri,
'state' => $state
];
$url = $this->apiUrl . 'connect.php?' . http_build_query($params);
$data = json_decode($this->httpGet($url), true);
if ($data['code'] === 0) return $data['url'];
throw new Exception('获取登录地址失败: ' . $data['msg']);
}
/** 用授权码换取用户信息 */
public function getUserInfo($code) {
$params = [
'act' => 'callback',
'appid' => $this->appId,
'appkey' => $this->appKey,
'type' => 'qq',
'code' => $code
];
$url = $this->apiUrl . 'connect.php?' . http_build_query($params);
$data = json_decode($this->httpGet($url), true);
if ($data['code'] === 0) {
return [
'openid' => $data['social_uid'],
'nickname' => $data['nickname'],
'avatar' => $data['faceimg'],
'gender' => $data['gender'],
'location' => $data['location'],
'ip' => $data['ip']
];
}
throw new Exception('获取用户信息失败: ' . $data['msg']);
}
private function httpGet($url) {
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_TIMEOUT => 30
]);
$response = curl_exec($ch);
curl_close($ch);
return $response;
}
}
// 使用示例
try {
$sdk = new QQLoginSDK('YOUR_APP_ID', 'YOUR_APP_KEY', 'https://api.your-domain.com/');
// 跳转到授权页
$loginUrl = $sdk->getLoginUrl('https://your-site.com/callback', 'random_state');
header('Location: ' . $loginUrl);
// 回调处理
if (isset($_GET['code'])) {
$user = $sdk->getUserInfo($_GET['code']);
echo "登录成功,欢迎 {$user['nickname']}";
}
} catch (Exception $e) {
echo "错误:" . $e->getMessage();
}
?>
接口清单
1. 获取登录地址
GET /connect.php?act=login
请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| appid | string | 是 | 应用唯一标识 |
| appkey | string | 是 | 应用密钥 |
| type | string | 是 | 固定值 qq |
| redirect_uri | string | 是 | 回调地址,需 URL 编码 |
| state | string | 否 | CSRF 防护随机串 |
正常响应
{
"code": 0,
"msg": "succ",
"type": "qq",
"url": "https://graph.qq.com/oauth2.0/authorize?..."
}
2. 回调换取用户信息
GET /connect.php?act=callback
请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| appid | string | 是 | 应用唯一标识 |
| appkey | string | 是 | 应用密钥 |
| type | string | 是 | 固定值 qq |
| code | string | 是 | QQ 授权码 |
正常响应
{
"code": 0,
"msg": "succ",
"type": "qq",
"social_uid": "QQ_OPENID",
"access_token": "ACCESS_TOKEN",
"nickname": "用户昵称",
"faceimg": "https://thirdqq.qlogo.cn/...",
"gender": "男",
"location": "北京",
"ip": "192.168.1.1"
}
3. 快捷查询已登录用户信息
GET /connect.php?act=query
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| appid | string | 是 | 应用唯一标识 |
| appkey | string | 是 | 应用密钥 |
| type | string | 是 | 固定值 qq |
| social_uid | string | 是 | 用户 OpenID |
目录结构
qq-login-platform/
├── core/ # 核心框架
│ ├── Lib/ # 基础类库
│ │ ├── Db.php # PDO 数据库封装
│ │ ├── Cache.php # 缓存管理
│ │ ├── Pay.php # 支付相关
│ │ └── ...
│ ├── helpers/
│ │ └── functions.php # 全局辅助函数
│ ├── App.php # 应用容器
│ ├── bootstrap.php # 启动引导
│ └── config.php # 全局配置
├── manager/ # 管理后台
│ ├── index.php
│ ├── apps.php # 应用审核
│ ├── members.php # 用户管理
│ └── ...
├── member/ # 用户中心
│ ├── index.php
│ ├── apps.php # 我的应用
│ ├── login.php
│ └── ...
├── pay/ # 支付回调
│ ├── notify.php # 异步通知
│ └── return.php # 同步跳转
├── setup/ # 安装向导
│ ├── index.php
│ └── database.sql # 初始表结构
├── static/ # 静态资源
│ └── css/
│ └── style.css
├── runtime/ # 运行时(需可写)
│ └── cache/
├── index.php # 门户首页
├── connect.php # 核心登录接口
├── docs.php # 在线文档
└── README.md
安全基线
- 全站 HTTPS:生产环境必须配置 SSL,杜绝明文传输
- 密钥隔离:AppKey 仅用于服务端通信,禁止暴露到前端
- 回调白名单:redirect_uri 必须与注册域名一致
- CSRF 防御:state 参数必填,回调时校验一致性
- 注入防护:全站 PDO 预处理语句,参数化查询
- XSS 过滤:模板输出统一使用
htmlspecialchars编码
更新记录
v1.0.0(2026-04-26)
- 项目首次发布
- 完成 QQ 登录接入链路
- 交付管理后台 + 用户中心 + 开发文档 + SDK
开源协议
MIT License
Copyright (c) 2026 Knight
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
联系与反馈
- 邮箱:3514574884@qq.com
- QQ 群:901336980
感谢每一位使用和支持这个项目的朋友。
维护者:Knight
最后更新:2026 年 4 月 26 日
评论
6