ThinkPHP接入QQ互联实现登录的案例分析

本篇介绍了使用thinkphp接入qq互联实现第三方登录的方法,作为一个小案例来为各位讲解,希望对各位有帮助。

ThinkPHP接入QQ互联实现登录的案例分析

ThinkPHP接入QQ互联实现登录的案例分析

我的一个二级域名项目想在也想接入QQ第三方登录功能,该项目采用的thinkphp5框架开发的项目,在网上搜了一些接入的案例,个人觉得鱼龙混杂不太适合自己,现在自己重新在thinkphp5框架上开发这个功能,下面是详细的开发步骤。

(推荐教程:thinkphp教程)

第一步、下载QQ互联SDK,我们是基于thinkphp5框架下的,当然是要用PHP版的SDK,下载下来后的文件目录如下。

立即学习“PHP免费学习笔记(深入)”;

1.png

第二步、将SDK主要目录上传到服务器合适的目录下,先说下SDK的主要的目录是API文件夹里面的class目录,当初为了做配置设置项测试,我上传了install文件夹,然后再开发环境配置了APP ID、APP Key以及callback_url,配置好之后会在API/comm文件夹中多处一个inc.php配置文件,最后再recorder类中会引用这个配置文件。可是在后面的 开发过程中我发现会报这个错The state does not match. You may be a victim of CSRF。后面我把qqlogin方法里面的 state放到session中,对官网的DEMO SDK已经完全失去信心了,不在用QQ互联全部的文件而是挑几个重要的类文件来做开发。后面想想官方给的SDK只是普通的PHP代码格式,我应用到thinkphp那很多东西都已经变了,最后我选择上个类文件,QC.php、URL.php、Oauth.php上传到extend/qqlogin目录下。在thinkphp5的项目中扩展类一般上传到extend文件夹下,如下图所示我上次的目录位置。

ViiTor实时翻译 ViiTor实时翻译

AI实时多语言翻译专家!强大的语音识别、AR翻译功能。

ViiTor实时翻译 116 查看详情 ViiTor实时翻译

2.png

第三步、改造上述三个类文件,因为QC.php是继承了Oauth.php,我们从后者改起,去掉require_once,加上命名空间如namespace qqlogin,首先看成员属性,类常量是腾讯平台的地址,不用管,原来有三个属性,recorder、error不需要,注释掉或直接删掉。下文同样,因为5个类文件我们只用到3个类文件,一个是报错类一个读取配置相关类。下面看Oauth.php成员属性、qqlogin跳转方法、qqcallback回调方法的,其他两个类文件没有太大的改大,按照上述规则改即可

recorder = new Recorder();        $this->urlUtils = new URL();        // $this->error = new ErrorCase();    }    public function qq_login(){        // $appid = $this->recorder->readInc("appid");        // $callback = $this->recorder->readInc("callback");        // $scope = $this->recorder->readInc("scope");        $appid = $this->appid;        $callback = $this->callback;        $scope = $this->scope;        //-------生成唯一随机串防CSRF攻击        $state = md5(uniqid(rand(), TRUE));        // $this->recorder->write('state',$state);        session('state',$state);        //-------构造请求参数列表        $keysArr = array(            "response_type" => "code",            "client_id" => $appid,            "redirect_uri" => $callback,            "state" => $state,            "scope" => $scope        );        $login_url =  $this->urlUtils->combineURL(self::GET_AUTH_CODE_URL, $keysArr);        return $login_url;    }    public function qq_callback(){        // $state = $this->recorder->read("state");        //--------验证state防止CSRF攻击        if(input('state') != session('state')){            // $this->error->showError("30001");            exit('30001');        }        //-------请求参数列表        $keysArr = array(            "grant_type" => "authorization_code",            "client_id" => $this->appid,            "redirect_uri" => urlencode($this->callback),            "client_secret" => $this->appkey,            "code" => $_GET['code']        );        //------构造请求access_token的url        $token_url = $this->urlUtils->combineURL(self::GET_ACCESS_TOKEN_URL, $keysArr);        $response = $this->urlUtils->get_contents($token_url);        if(strpos($response, "callback") !== false){            $lpos = strpos($response, "(");            $rpos = strrpos($response, ")");            $response  = substr($response, $lpos + 1, $rpos - $lpos -1);            $msg = json_decode($response);            // if(isset($msg->error)){            //     $this->error->showError($msg->error, $msg->error_description);            // }        }        $params = array();        parse_str($response, $params);        // $this->recorder->write("access_token", $params["access_token"]);        // return $params["access_token"];        session('access_token',$params["access_token"]);    }}

第四步、编写控制器调用函数和回调函数,同时检查回调地址是否正确(回调地址是当你添加QQ第三方登录QQ互联返回跳转的地址,该地址携带重要参数,能获取最后用户的数据),有些时候如果你在QQ互联填写的回调地址与你控制器的不一样,那么最后就会卡在那个QQ互联填写的回调地址那,如www.100txy.com/index.php?code=65B7668A4F1BBB71DD0DF52B55AC1FC1&state=804e921e18e3545ecdf690316639c067。下面是控制器方法

use qqloginQC;// 处理qq登录    public function qqlogin(){        $qq = new QC();        $url = $qq->qq_login();        $this->redirect($url);    }    // qq登录回调函数    public function qqcallback(){        $qq = new QC();        $qq->qq_callback();        $qq->get_openid();        $qq = new QC();        $datas = $qq->get_user_info();        die(var_dump($datas));//为用户数据    }

值得注意的是在回调函数里面要实例化两次QC才能拿到用户信息,第二次实例化的时候才有openid和access_token两个参数。

更多Thinkphp教程,请关注PHP中文网!

以上就是ThinkPHP接入QQ互联实现登录的案例分析的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/359032.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月6日 02:03:08
下一篇 2025年11月6日 02:08:03

相关推荐

  • php框架的整理和补充

    选型应匹配项目需求,Laravel适合中大型应用,Symfony适合企业级定制,CodeIgniter和ThinkPHP适合小型或快速上线项目,需关注自动加载、日志分级、迁移分离、中间件顺序及微框架灵活使用,合理优化才能稳定支撑迭代。 PHP框架的选择和使用,关键不在数量多,而在是否匹配项目需求、团…

    2025年12月13日
    000
  • 宝塔怎么上传php源码_宝塔上传php源码配置与部署步骤【指南】

    创建网站环境:登录宝塔面板,添加站点并配置域名、PHP版本及数据库;2. 上传源码:通过文件管理器或FTP将PHP源码上传至网站根目录并解压;3. 配置权限与伪静态:设置runtime等目录权限为755或777,按框架选择伪静态规则;4. 完成安装:访问域名运行安装向导,导入数据库,删除instal…

    2025年12月13日
    000
  • ThinkPHP配置文件的方法

    ThinkPHP配置文件用于定义运行参数,存于config/目录下,按框架默认→应用公共→环境→运行时顺序加载覆盖,支持config()函数读写及.env多环境管理。 ThinkPHP 的配置文件主要用于定义应用运行时的各种参数,比如数据库连接、缓存驱动、调试模式等。核心配置通过 PHP 数组返回,…

    2025年12月13日
    000
  • 宝塔怎么安装php源码_宝塔安装php源码环境与步骤【教程】

    首先安装PHP环境,登录宝塔面板→软件商店→搜索PHP→选择版本安装;再添加网站并设置根目录与PHP关联;接着上传PHP源码至站点目录,确保index.php在根目录;然后调整PHP配置,修改内存、执行时间及禁用函数;最后根据框架设置伪静态规则,如ThinkPHP需添加rewrite规则并保存生效。…

    2025年12月13日
    000
  • 怎么用phpstudy安装php源码_用phpstudy安装php源码配置与法【教程】

    首先下载安装PhpStudy并选择合适路径,然后在面板中添加站点,设置域名和源码目录,选择PHP版本后保存;接着启动Apache或Nginx服务,浏览器访问对应域名或localhost端口即可运行PHP源码;通过修改php.ini可启用扩展、调整上传限制、开启错误显示,并支持伪静态规则,便于开发调试…

    2025年12月13日
    000
  • php中QPM框架是什么?

    目前PHP中并无公认的QPM框架,可能是对Laravel、ThinkPHP等主流框架的误写,或指代内部私有框架、工具缩写(如包管理脚本),亦或是极小众未被广泛认知的实验性项目。 QPM并不是PHP中广泛认知或主流的框架名称。目前在PHP社区中,并没有一个被官方认可或广泛使用的框架叫做“QPM”。可能…

    2025年12月13日
    000
  • php源码怎么进入后台_php源码进入后台入口与权限法【指南】

    1、通过常见路径如/admin.php或工具扫描尝试访问后台;2、分析源码路由配置定位真实入口;3、查询数据库获取或修改管理员凭证;4、利用漏洞篡改权限参数提升身份;5、检查.htaccess或代码中的IP限制规则并绕过。 如果您尝试访问某个PHP源码构建的网站后台,但无法找到登录入口或缺乏相应权限…

    2025年12月13日
    000
  • PHP之ThinkPHP有几种查询?

    ThinkPHP有5种核心查询方式:1.基础链式查询,2.原生SQL查询,3.视图查询,4.关联查询(含预加载),5.查询作用域;其中链式+关联+作用域覆盖90%以上需求。 ThinkPHP 的查询方式主要围绕模型(Model)和查询构建器(Query Builder)展开,常见且实用的有 5 种核…

    2025年12月13日
    000
  • php首页源码怎么找_php首页源码查找位置与定位法【技巧】

    首先检查网站根目录下的index.php等默认入口文件,查看是否包含首页输出或模板调用;若使用框架,则需查看路由配置文件(如web.php)中根路径’/’对应的控制器和方法,进而定位实际渲染逻辑;同时可通过服务器配置(如DirectoryIndex)确认默认首页文件;还可通过…

    2025年12月13日
    000
  • php中Quercus框架的安装

    Quercus是Java实现的PHP引擎,用于在Tomcat或Resin中运行PHP,适用于已有Java项目需集成少量PHP的场景,不支持PHP 7+且已停止维护,现代开发不推荐使用。 Quercus 并不是 PHP 的框架,而是 Caucho Technology 开发的一个 Java 实现的 P…

    2025年12月13日
    000
  • PHP中ThinkPHP的高级查询

    ThinkPHP高级查询支持多表关联、闭包动态条件、子查询及聚合统计。通过join链式调用实现灵活关联;闭包where按需拼接防SQL注入;子查询支持in/exist;group+聚合函数满足报表需求。 ThinkPHP 的高级查询主要体现在对复杂业务场景的支持上,比如多表关联、子查询、聚合统计、动…

    2025年12月13日
    000
  • 有php源码怎么搭建_有php源码搭建站点与配置法【指南】

    首先搭建PHP运行环境,安装Apache或Nginx、PHP及MySQL;随后将源码部署至Web服务器根目录并设置文件权限;接着配置数据库连接信息,确保程序可访问数据库;然后创建数据库并导入SQL文件以初始化数据结构;最后调整服务器配置,启用重写模块、设置默认首页并关闭错误显示以保障安全。 如果您已…

    2025年12月13日
    000
  • php源码怎么查杀后面_php源码查杀后门与清理技巧【方法】

    发现PHP源码中存在后门时,应立即采取措施清除恶意代码并加固系统安全。首先使用D盾、河马等Webshell查杀工具对网站目录进行全盘扫描,识别并隔离标记为“疑似Webshell”的高危文件;随后通过代码编辑器全局搜索eval、assert、system等危险函数,结合上下文分析其调用合理性,重点排查…

    2025年12月13日
    000
  • php源码怎么做_php源码做项目流程与实现法【教程】

    首先明确PHP项目开发需遵循系统化流程,具体包括:一、需求分析与规划,明确功能模块与技术栈;二、搭建本地环境,安装XAMPP等工具并配置服务;三、设计数据库结构,创建表并配置连接参数;四、按MVC模式组织代码,编写模型、控制器与视图文件;五、逐项实现注册登录、数据展示等功能模块;六、采用预处理语句、…

    2025年12月13日
    000
  • php消息队列的介绍

    消息队列是PHP中实现异步处理、流量削峰和系统解耦的关键技术,通过生产者将任务如发邮件、处理订单等放入队列,消费者后台逐步执行,提升系统稳定性和用户体验;常用实现方式包括Redis List、RabbitMQ、Kafka及ThinkPHP的think-queue扩展。 PHP消息队列不是什么神秘技术…

    2025年12月13日
    000
  • php直播源码怎么用_php直播源码用部署与播放设置【指南】

    部署PHP直播系统需先配置Linux服务器环境,安装Nginx、PHP 7.4+和MySQL,通过宝塔面板可简化流程;随后上传源码至网站根目录,解压后修改数据库配置文件并导入live.sql数据,设置运行目录为/public并配置伪静态;接着部署流媒体服务如SRS或Nginx-RTMP模块,配置推流…

    2025年12月13日
    000
  • php空间怎么上传网站源码_php空间上传网站源码步骤与法【技巧】

    上传网站源码到PHP空间需先确认PHP版本、扩展支持并创建数据库;2. 可通过FTP工具(如FileZilla)或主机控制面板上传压缩源码并解压至根目录;3. 最后通过浏览器访问域名完成安装向导,填写数据库信息,删除安装目录并设置文件权限即可运行网站。 上传网站源码到PHP空间是搭建网站的基础操作,…

    2025年12月13日
    000
  • php源码怎么更新缓存_php源码更新缓存配置与刷新步骤【技巧】

    修改PHP代码后页面未更新,需清除缓存。1、调整php.ini中OPcache配置并调用opcache_reset()刷新;2、重启Apache或Nginx+PHP-FPM服务;3、删除框架缓存文件或执行php artisan cache:clear等命令;4、运行composer dump-aut…

    2025年12月13日
    000
  • php源码源码怎么安装_用PHP环境安装源码步骤教程【教程】

    首先搭建PHP运行环境,选择XAMPP等工具安装并启动Apache和MySQL服务,将源码放入htdocs目录;接着配置数据库,通过phpMyAdmin创建数据库并导入.sql文件,修改config.php中的连接信息;然后设置uploads、cache等目录的可写权限为755或777;之后访问ht…

    2025年12月13日
    000
  • php怎么找源码_php找源码渠道与安全获取技巧

    可通过开源平台如GitHub、官方渠道、Composer、技术社区及本地服务器安全获取PHP源码。首先选择可信来源,优先下载高星项目或官网发布版本,并核对哈希值确保完整性;其次利用Composer安装依赖查看第三方库代码,或参与社区交流获取实战项目资源;最后可登录部署服务器直接浏览现有系统源码结构,…

    2025年12月13日
    000

发表回复

登录后才能评论
关注微信