这篇文章主要介绍“PHP如何实现扫码登录QQ”,在日常操作中,相信很多人在PHP如何实现扫码登录QQ问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PHP如何实现扫码登录QQ”的疑惑有所帮助!接下来,请跟着小编一起来学习吧! PHP实现扫码登录QQ的方法:1、通过“public function QRcode(){…}”方法获取登录验证码;2、动态传入QQ微信的类名字符串快速实例化;3、生成二维码并轮询检测二维码状态即可。具体代码如下:QQ:
get_curl_split($url); preg_match('/qrsig=(.*?);/',$arr['header'],$match); if($qrsig=$match[1]) returnarray('code'=>200,'qrsig'=>$qrsig,'data'=>base64_encode($arr['body'])); else returnarray('code'=>400,'msg'=>'二维码获取失败'); } publicfunctionListenQR($qrsig) { $qrsig=$qrsig[0]; if(empty($qrsig))returnarray('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; } returnarray('code'=>200,'uin'=>$uin,'skey'=>'@'.$skey[1],'pskey'=>$pskey,'superkey'=>$superkey[1],'nick'=>$r[5]); }else{ returnarray('code'=>201,'msg'=>'登录成功,获取相关信息失败!'.$r[2]); } }elseif($r[0]==65){ returnarray('code'=>400,'msg'=>'二维码已失效。'); }elseif($r[0]==66){ returnarray('code'=>202,'msg'=>'二维码未失效。'); }elseif($r[0]==67){ returnarray('code'=>302,'msg'=>'正在验证二维码。'); }else{ returnarray('code'=>401,'msg'=>$r[4]); } }else{ returnarray('code'=>403,'msg'=>$ret); } } privatefunctiongetqrtoken($qrsig){ $len=strlen($qrsig); $hash=0; for($i=0;$i
微信:
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; } publicfunctionListenQR($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('/(d*?)/',$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类:
cl=new$type(); } publicfunctionPsr4Autoload($class) { $class_file=$this->path.'/'.$class.'.php'; if(file_exists($class_file)) { include"$class_file"; }else{ die('类文件'.$class_file.'不存在'); } } publicfunctionQRcode() { returncall_user_func([$this->cl,__FUNCTION__]); } publicfunctionListenQR(...$args) { returncall_user_func([$this->cl,__FUNCTION__],$args); } publicfunction__call($name,$arguments) { call_user_func_array([$this->cl,$name],(array)$arguments); } }
以及最后一个curl类:
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; } functioncurl($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:close"; curl_setopt($ch,CURLOPT_HTTPHEADER,$httpheader); if($paras['ctime']){//连接超时 curl_setopt($ch,CURLOPT_CONNECTTIMEOUT_MS,$paras['ctime']); } if($paras['rtime']){//读取超时 curl_setopt($ch,CURLOPT_TIMEOUT_MS,$paras['rtime']); } if($paras['post']){ curl_setopt($ch,CURLOPT_POST,1); curl_setopt($ch,CURLOPT_POSTFIELDS,$paras['post']); } if($paras['header']){ curl_setopt($ch,CURLOPT_HEADER,true); } if($paras['cookie']){ curl_setopt($ch,CURLOPT_COOKIE,$paras['cookie']); } if($paras['refer']){ if($paras['refer']==1){ curl_setopt($ch,CURLOPT_REFERER,'http://m.qzone.com/infocenter?g_f='); }else{ curl_setopt($ch,CURLOPT_REFERER,$paras['refer']); } } if($paras['ua']){ curl_setopt($ch,CURLOPT_USERAGENT,$paras['ua']); }else{ curl_setopt($ch,CURLOPT_USERAGENT,"Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/65.0.3325.181Safari/537.36"); } if($paras['nobody']){ curl_setopt($ch,CURLOPT_NOBODY,1); } curl_setopt($ch,CURLOPT_ENCODING,"gzip"); curl_setopt($ch免费云主机域名,CURLOPT_RETURNTRANSFER,1); $ret=curl_exec($ch); curl_close($ch); return$ret; } publicfunctionget_curl_split($url){ $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; } }
大致调用的流程1、保存四个类到文件里面2、引入文件3、单独写两个接口,一个生成qr码(base64),一个轮询二维码扫码状态4、用户扫码成功后、会返回一个QQ号火微信唯一id5、这里我只演示一个微信扫码登陆的例子生成二维码并轮询检测二维码状态 login.php :
QRcode(); ?> "uuid="=$ret['uuid']?>">
ajax.php :
ListenQR($_GET['uuid']); //var_dump($ret); echojson_encode($ret,true);exit;
这个例子是微信的,QQ同样的代码一样可以运行,数据库用户表多一个qq和wxuin字段、用于保存用户绑定的QQ和微信。
这个例子是微信的,QQ同样的代码一样可以运行,数据库用户表多一个qq和wxuin字段、用于保存用户绑定的QQ和微信。到此,关于“PHP如何实现扫码登录QQ”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注百云主机网站,小编会继续努力为大家带来更多实用的文章!
相关推荐: Vue中的Mustache插值语法、v-bind指令怎么使用
本篇内容介绍了“Vue中的Mustache插值语法、v-bind指令怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!⭐⭐mustache 语法: 是”胡子…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。