广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >PHP如何实现扫码登录QQ
  • 652
分享到

PHP如何实现扫码登录QQ

2023-07-04 14:07:03 652人浏览 独家记忆
摘要

这篇文章主要介绍“PHP如何实现扫码登录QQ”,在日常操作中,相信很多人在php如何实现扫码登录QQ问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PHP如何实现扫码登录QQ”的疑惑有所帮助!接下来,请跟着小编

这篇文章主要介绍“PHP如何实现扫码登录QQ”,在日常操作中,相信很多人在php如何实现扫码登录QQ问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PHP如何实现扫码登录QQ”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

PHP实现扫码登录QQ的方法:1、通过“public function QRcode(){...}”方法获取登录验证码;2、动态传入QQ微信的类名字符串快速实例化;3、生成二维码并轮询检测二维码状态即可。

具体代码如下:

QQ:

<?phpclass QQ extends Curl_api{    //获取登录验证码    public function QRcode()    {        $url='https://ssl.ptlogin2.qq.com/ptqrshow?appid=549000912&e=2&l=M&s=4&d=72&v=4&t=0.5409099'.time().'&daid=5';        $arr=$this->get_curl_split($url);        preg_match('/qrsig=(.*?);/',$arr['header'],$match);        if($qrsig=$match[1])            return array('code'=>200,'qrsig'=>$qrsig,'data'=>base64_encode($arr['body']));        else            return array('code'=>400,'msg'=>'二维码获取失败');    }    public function ListenQR($qrsig)    {        $qrsig = $qrsig[0];        if(empty($qrsig))return array('code'=>-1,'msg'=>'qrsig不能为空');        $url='Https://ssl.ptlogin2.qq.com/ptqrlogin?u1=https%3A%2F%2Fqzs.qq.com%2Fqzone%2Fv5%2Floginsucc.html%3Fpara%3Dizone&ptqrtoken='.$this->getqrtoken($qrsig).'&login_sig=&ptredirect=0&h=1&t=1&g=1&from_ui=1&ptlang=2052&action=0-0-'.time().'0000&js_ver=10194&js_type=1&pt_uistyle=40&aid=549000912&daid=5&';        $ret = $this->get_curl($url,0,$url,'qrsig='.$qrsig.'; ',1);        if(preg_match("/ptuiCB\('(.*?)'\)/", $ret, $arr)){            $r=explode("','",str_replace("', '","','",$arr[1]));            if($r[0]==0){                preg_match('/uin=(\d+)&/',$ret,$uin);                $uin=$uin[1];                preg_match('/skey=@(.{9});/',$ret,$skey);                preg_match('/superkey=(.*?);/',$ret,$superkey);                $data=$this->get_curl($r[2],0,0,0,1);                if($data) {                    preg_match("/p_skey=(.*?);/", $data, $matchs);                    $pskey = $matchs[1];                }                if($pskey){                    if(isset($_GET['findpwd'])){                        $_SESSION['findpwd_qq']=$uin;                    }                    return array('code'=>200,'uin'=>$uin,'skey'=>'@'.$skey[1],'pskey'=>$pskey,'superkey'=>$superkey[1],'nick'=>$r[5]);                }else{                    return array('code'=>201,'msg'=>'登录成功,获取相关信息失败!'.$r[2]);                }            }elseif($r[0]==65){                return array('code'=>400,'msg'=>'二维码已失效。');            }elseif($r[0]==66){                return array('code'=>202,'msg'=>'二维码未失效。');            }elseif($r[0]==67){                return array('code'=>302,'msg'=>'正在验证二维码。');            }else{                return array('code'=>401,'msg'=>$r[4]);            }        }else{            return array('code'=>403,'msg'=>$ret);        }      }    private function getqrtoken($qrsig){        $len = strlen($qrsig);        $hash = 0;        for($i = 0; $i < $len; $i++){            $hash += (($hash << 5) & 2147483647) + ord($qrsig[$i]) & 2147483647;            $hash &= 2147483647;        }        return $hash & 2147483647;    }}

  微信:

<?phpclass Wechat extends Curl_Api{    //获取验证码    public function QRcode()    {        $url = "https://login.weixin.qq.com/jslogin?appid=wx782c26e4c19acffb&fun=new&lang=zh_CN";        $uuid = $this->get_curl($url);//        var_dump($uuid);        $uuid = substr($uuid,strpos($uuid,'"')+1,-2);        $url = "https://login.wx.qq.com/qrcode/{$uuid}?t=WEBwx";        $qrcode = file_get_contents($url);        $result = ['code'=>200,'uuid'=>$uuid,'qrcode'=>base64_encode($qrcode)];        return $result;    }    public function ListenQR($uuid)    {        $paras['ctime'] = 1000;        $paras['rtime'] = 1000;        $paras['refer'] = 'https://wx2.qq.com/';        $api = 'https://login.wx2.qq.com/cgi-bin/mmwebwx-bin/login?loginicon=true&uuid=' . $uuid[0] . '&tip=0';        $body = $this->curl($api, $paras);        preg_match('/(\d){3}/', $body, $code);        preg_match('/redirect_uri="(.*?)"/', $body, $url);        if ($code[0] == '200') {            $body = $this->curl($url[1]);            preg_match('/<wxuin>(\d*?)<\/wxuin>/', $body, $wxuin);            $ret['code'] = 200;            $ret['data']['uin'] = $wxuin[1];            $ret['data']['type'] = 'wx';            $ret['msg'] = '登录成功';        } else {            $ret['code'] = 408;            $ret['msg'] = '请使用手机微信扫码登录';        }        return $ret;    }}

  为了方便跳用,这里我又封装了一个类

动态传入QQ微信的类名字符串快速实例化

Tencent类:

<?phpClass Tencent{    protected $path = __DIR__ . '/';     private $cl;         public function __construct($type)    {        //注册自动加载函数        spl_autoload_reGISter([$this,'Psr4Autoload']);        //引入curl        $this->cl = new $type();    }    public function Psr4Autoload($class)    {    $class_file = $this->path .'/'. $class . '.php';    if (file_exists($class_file))    {        include "$class_file";    }else{        die('类文件'.$class_file .'不存在');    }    }    public function QRcode()    {        return call_user_func([$this->cl,__FUNCTION__]);    }    public function ListenQR(...$args)    {        return call_user_func([$this->cl,__FUNCTION__],$args);    }    public function __call($name, $arguments)    {       call_user_func_array([$this->cl,$name],(array)$arguments);    }}

  以及最后一个curl类:

<?phpclass Curl_Api{    public $ua = "Mozilla/5.0 (windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36";           public function get_curl($url,$post=0,$referer=0,$cookie=0,$header=0,$ua=0,$nobaody=0){        $ch = curl_init();        curl_setopt($ch, CURLOPT_URL,$url);        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);        $httpheader[] = "Accept: application/JSON";        $httpheader[] = "Accept-Encoding: gzip,deflate,sdch";        $httpheader[] = "Accept-Language: zh-CN,zh;q=0.8";        $httpheader[] = "Connection: keep-alive";        curl_setopt($ch, CURLOPT_HTTPHEADER, $httpheader);        if($post){            curl_setopt($ch, CURLOPT_POST, 1);            curl_setopt($ch, CURLOPT_POSTFIELDS, $post);        }        if($header){            curl_setopt($ch, CURLOPT_HEADER, TRUE);        }        if($cookie){            curl_setopt($ch, CURLOPT_COOKIE, $cookie);        }        if($referer){            curl_setopt($ch, CURLOPT_REFERER, $referer);        }        if($ua){            curl_setopt($ch, CURLOPT_USERAGENT,$ua);        }else{            curl_setopt($ch, CURLOPT_USERAGENT,$this->ua);        }        if($nobaody){            curl_setopt($ch, CURLOPT_NOBODY,1);          }        curl_setopt($ch, CURLOPT_TIMEOUT, 10);        curl_setopt($ch, CURLOPT_ENCODING, "gzip");        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);        $ret = curl_exec($ch);        curl_close($ch);        return $ret;    }    function curl($url, $paras = array()) {        $ch = curl_init();        curl_setopt($ch, CURLOPT_URL, $url);        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);        $httpheader[] = "Accept:**";        $httpheader[] = "Accept-Encoding: gzip,deflate,sdch";        $httpheader[] = "Accept-Language: zh-CN,zh;q=0.8";        $httpheader[] = "Connection: keep-alive";        curl_setopt($ch, CURLOPT_HTTPHEADER, $httpheader);        curl_setopt($ch, CURLOPT_HEADER, TRUE);        curl_setopt($ch, CURLOPT_USERAGENT,$this->ua);        curl_setopt($ch, CURLOPT_TIMEOUT, 10);        curl_setopt($ch, CURLOPT_ENCODING, "gzip");        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);        $ret = curl_exec($ch);        $headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE);        $header = substr($ret, 0, $headerSize);        $body = substr($ret, $headerSize);        $ret=array();        $ret['header']=$header;        $ret['body']=$body;        curl_close($ch);        return $ret;    }}

  大致调用的流程

保存四个类到文件里面

引入文件

单独写两个接口,一个生成qr码(base64),一个轮询二维码扫码状态

用户扫码成功后、会返回一个QQ号火微信唯一id

这里我只演示一个微信扫码登陆的例子

生成二维码并轮询检测二维码状态 login.php :

<?php//我这里只引入了一个文件的原因是因为Wechat和QQ类不用引入、只需要把Curl_Api请求类引入进来就好,但我Tencent类内已经引入了。所以这里我只需要引入一个文件就好include "Lib/Tencent/Tencent.php";$wx = new Tencent("Wechat");$ret = $wx->QRcode();?><!--直接生成QR码、记得把uuid给带上--><img id="wx" src="data:text/html;base64,<?=$ret['qrcode']?>" uuid="<?=$ret['uuid']?>">  <script src="https://cdn.bootCSS.com/Jquery/3.4.1/jquery.js"></script><script>    // setTimeout(function () {    //     var uuid = document.getElementById('wx').getAttribute("uuid");    //     var url ="/ajax.php?uuid="+uuid;    //     console.log(url);    // },1000);    //每秒去查询一次二维码状态    $(document).ready(function () {        setInterval(function () {            var uuid = document.getElementById('wx').getAttribute("uuid");            var url ="/ajax.php?uuid="+uuid;            $.ajax({type:"GET",url:url,success:function (data) {                    if (data.code == 200)                    {                        alert("登陆成功,uin为:"+data.uid);                    }                }});        },1000);    });  </script>

  ajax.php :

<?phpinclude "Lib/Tencent/Tencent.php";$wx = new Tencent("Wechat");//直接获取到uuid后,监听就好了$ret = $wx->ListenQR($_GET['uuid']);//var_dump($ret);echo json_encode($ret,true);exit;

这个例子是微信的,QQ同样的代码一样可以运行,数据库用户表多一个qq和wxuin字段、用于保存用户绑定的QQ和微信。

到此,关于“PHP如何实现扫码登录QQ”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: PHP如何实现扫码登录QQ

本文链接: https://www.lsjlt.com/news/346095.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • PHP如何实现扫码登录QQ
    这篇文章主要介绍“PHP如何实现扫码登录QQ”,在日常操作中,相信很多人在PHP如何实现扫码登录QQ问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PHP如何实现扫码登录QQ”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-07-04
  • PHP怎么实现扫码登录QQ
    本教程操作环境:Windows7系统、PHP8.1版、Dell G3电脑。PHP怎么实现扫码登录QQ?分享一下,PHP实现第四方QQ微信扫码登陆,不接入qq互联以及微信开发者平台就可以实现用户对接鹅厂,phpQQ微信扫码登陆 自己抓的QQ包...
    99+
    2022-11-21
    qq php
  • .Net Core实现第三方QQ扫码登录
    目录效果展示:核心实现展示二维码解析扫码结果登录视图登录授权配置Cookie认证策略创建用户登录标识用户退出登录代码开源效果展示: 核心实现 展示二维码 public static...
    99+
    2022-11-13
  • php怎么实现微信扫码登录
    本文操作环境:windows10系统、php 7、thinkpad t480电脑。微信已经成为我们日常生活中必不可少的一部分,为了让更多的用户更加方便地使用微信及相关产品,微信扫一扫功能越来越普遍。那么如果我们要自己实现这个功能该如何做呢?...
    99+
    2018-06-26
    php 微信
  • Python中如何实现MOOC扫码登录
    目录1、基本原理2、代码实现1、访问网站扫码登录页,并下载二维码2、模拟轮询3、弹出二维码,扫码登录4、带上token请求资源总结1、基本原理 访问网站扫码登录页,网站给浏览器返回一...
    99+
    2023-01-06
    Python实现扫码 MOOC扫码登录 Python MOOC扫码登录
  • uniapp如何实现钉钉扫码登录
    这篇文章主要为大家展示了“uniapp如何实现钉钉扫码登录”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“uniapp如何实现钉钉扫码登录”这篇文章吧。1. 用H5调起钉钉扫码登录钉钉在网页端的扫...
    99+
    2023-06-22
  • 如何使用PHP实现微信扫码登录功能
    随着移动互联网的快速发展,微信作为一种重要的社交工具,已经逐渐成为人们日常生活中必不可少的一个部分。在许多网站和应用程序中,微信登录功能已经成为了一种趋势,因为它可以让用户直接使用已有的微信账号来登录,不需要再创建新的账户,同时也能提供更便...
    99+
    2023-05-14
    微信扫码登录 php
  • Java实现微信扫码登录
    微信扫码登录 1. 授权流程说明第一步:请求 code第二步:通过 code 获取 access_token第三步:通过 access_token 调用接口 2. 授权流程代码3...
    99+
    2023-09-01
    微信 java
  • springBoot基于webSocket实现扫码登录
    最近单位又有一个新Java项目。 涉及到扫码登录。之前项目使用的是 ajax轮询的方式。感觉太low了。 所以这次用webSocket的方式进行实现 好。废话不多说!咱们开始!! 一...
    99+
    2022-11-12
  • springboot扫码登录的简单实现
    目录前言项目简介实现思路实现步骤前言 本文将介绍基于SpringBoot + Vue + Android实现的扫码登录demo的总体思路,完整代码已上传到GitHub。Web端体验地...
    99+
    2022-11-12
  • SpringBoot实现扫码登录的示例代码
    目录一、首先咱们需要一张表二、角色都有哪些三、接口都需要哪些?四、步骤五、疯狂贴代码Spring Boot中操作WebSocket最近有个项目涉及到websocket实现扫码登录,看...
    99+
    2022-11-13
  • SpringBoot怎么实现二维码扫码登录
    本篇内容介绍了“SpringBoot怎么实现二维码扫码登录”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、手机扫二维码登录的原理二维码扫码...
    99+
    2023-07-05
  • 基于Java怎么实现扫码登录
    这篇文章主要介绍了基于Java怎么实现扫码登录的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇基于Java怎么实现扫码登录文章都会有所收获,下面我们一起来看看吧。原理解析1. 身份认证机制在介绍扫码登录的原理之前...
    99+
    2023-06-30
  • SpringBoot实现扫码登录的项目实践
    目录一、首先咱们需要一张表二、角色都有哪些三、接口都需要哪些?四、步骤五、疯狂贴代码Spring Boot中操作WebSocket一、首先咱们需要一张表 这表是干啥的呢?就是记录一下...
    99+
    2022-11-13
  • 怎么使用PHP实现微信扫码登录功能
    这篇文章主要讲解了“怎么使用PHP实现微信扫码登录功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用PHP实现微信扫码登录功能”吧!一、准备工作在开始实现微信扫码登录功能之前,我们需...
    99+
    2023-07-05
  • uniapp实现钉钉扫码登录示例代码
    由于uniapp暂无钉钉授权登录所以本文将钉钉扫码登录作为网页嵌入uniapp,最终实现钉钉扫码登录app 1. 用H5调起钉钉扫码登录 钉钉在网页端的扫码登录可参考钉钉文档:扫码登...
    99+
    2022-11-12
  • 详解Vue PC端如何实现扫码登录功能
    本篇文章给大家带来了关于Vue的相关知识,其中主要介绍了在PC端实现扫码的原理是什么?怎么生成二维码图片?怎么用Vue实现前端扫码登录?感兴趣的朋友,下面一起来看一下吧,希望对大家有帮助。.markdown-body{word-break:...
    99+
    2023-05-14
    前端 Vue.js
  • Vue PC前端扫码登录功能实现
    目录需求描述思路解析PC 扫码原理?前端功能实现如何生成二维码图片?如何控制二维码的时效性?前端如何获取服务器二维码的状态?参考资料:总结需求描述 目前大多数PC端应用都有配套的移动...
    99+
    2022-12-29
    vue扫码登录功能 vue登录功能 vue 扫码登录
  • PHP实现微信关注公众号扫码登录功能
    PHP微信扫码登录看起来简单,但做起来有点复杂,微信接口的坑有点多,稍不注意,就费很多时间。PHP判断是否首次关注公众号,扫码关注公众号获取微信用户头像、openid和省市等信息源码。        ...
    99+
    2023-06-05
  • VuePC端实现扫码登录功能示例代码
    目录需求描述思路解析前端功能实现如何控制二维码的时效性?前端如何获取服务器二维码的状态?本篇文章给大家带来了关于Vue的相关知识,其中主要介绍了在PC端实现扫码的原理是什么?怎么生成...
    99+
    2023-01-28
    Vue PC端扫码登录 Vue 扫码登录 vue登录功能
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作