李白

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 证书(生产环境强制要求)

三步安装

  1. 将源码解压至网站根目录
  2. 浏览器访问 http://你的域名/setup/ 进入图形化安装向导
  3. 填写数据库连接信息与管理后台初始账号,完成安装

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

安全基线

  1. 全站 HTTPS:生产环境必须配置 SSL,杜绝明文传输
  2. 密钥隔离:AppKey 仅用于服务端通信,禁止暴露到前端
  3. 回调白名单:redirect_uri 必须与注册域名一致
  4. CSRF 防御:state 参数必填,回调时校验一致性
  5. 注入防护:全站 PDO 预处理语句,参数化查询
  6. 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
旧报剪贴簿
旧报剪贴簿4 天前
PHP 7.4 和 MySQL 5.7 的要求让我想起早几年图书馆旧系统升级时的兼容账,版本卡得太死迁移就费劲。聚合登录图省事,可数据隔离那部分得多核对几遍才踏实。
纸上戏中人
纸上戏中人4 天前
这个登录流程的节奏感倒很像一幕戏的起承转合,OAuth的跳转就像角色换场,不过后台那些安全校验才是真正吊威亚的地方。数据隔离要是没做明白,台上热热闹闹,后台可就乱套了。
讲台说史人
讲台说史人4 天前
做历史教学时,审核周期长确实是麻烦事,能有一条标准化的快速通道接入,对中小站长挺实用。聚合平台的合规性我理解如数据隔离还需在实际运营中验证,但方案本身值得历史课里当案例讲讲。
思辨长椅
思辨长椅4 天前
把审核环节外包给聚合平台,前提是平台自身能承担同等的资质校验义务,否则只是把合规风险后移了一层。这个前提如果不先论证清楚,接入效率再高也只是把问题藏在了后面。
史海小书虫
史海小书虫4 天前
作为外行看这类开源项目,最在意的就是文档和接入步骤是否清楚。这篇把OAuth流程和安全基线都摆出来了,至少让使用方心里有底,MIT协议也确实少了很多授权上的顾虑。