php扫码登录如何实现

php扫码登录如何实现

内容导读

收集整理的这篇技术教程文章主要介绍了php扫码登录如何实现,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5822字,纯文字阅读大概需要9分钟

内容图文

PHP微信公众号扫码模拟登录功能

功能只是将:https://github.com/huanz/wechat-mp-hack 改成PHP实现罢了。

主要流程如下:

1、先访问https://mp.weixin.qq.com/,模拟登录,进入二维码页面。

2、带着返回的cookie下载二维码,程序后台一直while循环,等待扫描消息。

3、打开下载的二维码,微信扫码,登录成功,获取token和cookie,然后后面就可以自由发挥了。

相关推荐:《php入门教程》

供上代码:

class WeiSendAuto{
//--------------------------------------------------------LOGIN START
private $_apis = [

"host"

 => "https://mp.weixin.qq.com",

"login"

 => "https://mp.weixin.qq.com/cgi-bin/bizlogin?action=startlogin",

"qrcode"

=> "https://mp.weixin.qq.com/cgi-bin/loginqrcode?action=getqrcode¶m=4300",

"loginqrcode"
=> "https://mp.weixin.qq.com/cgi-bin/loginqrcode?action=ask&token=&lang=zh_CN&f=json&ajax=1",

"loginask"
 => "https://mp.weixin.qq.com/cgi-bin/loginqrcode?action=ask&token=&lang=zh_CN&f=json&ajax=1

&random=",

"loginauth"
 => "https://mp.weixin.qq.com/cgi-bin/loginauth?action=ask&token=&lang=zh_CN&f=json&ajax=1",

"bizlogin"
 => "https://mp.weixin.qq.com/cgi-bin/bizlogin?action=login&lang=zh_CN"
];
private $_redirect_url = "";
private $_key


= "";
private function _getCookieFile(){

return WEI_UPLOAD_PATH."cookie_{$this->_key}.text";
}
private function _getSavePath(){

return WEI_UPLOAD_PATH.$this->_qrcodeName();
}
private function _qrcodeName(){

return "qrcode_{$this->_key}.png";
}
private function _log($msg){

Log::record("[微信调度:".date("Y-m-d H:i:s")."] ======: {$msg}");
}
public function getToken(){

return Utils::getCache("token_{$this->_key}");
}
public function setToken($token){

 Utils::setCache("token_{$this->_key}",$token);
}
public function init($options){

if(!isset($options["key"])){


die("Key is Null!");

}

$this->_key
 =
$options["key"];

if($this->getToken()){


echo("HAS Token !");


return;

}else{


//尼玛,先要获取首页!!!


$this->fetch("https://mp.weixin.qq.com/","","text");


$this->_log("start login!!");


$this->start_login($options);

}
}
private function start_login($options){

$_res

= $this->_login($options["account"],$options["password"]);

if(!$_res["status"]){


$this->_log($_res["info"]);


return;

}

//保存二维码

$this->_saveQRcode();

$_ask_api

=
$this->_apis["loginask"];

$_input["refer"] =
$this->_redirect_url;

$_index

 =
1;

while(true){/*


if($_index>60){



break;


}*/


$_res

=
$this->fetch($_ask_api.$this->getWxRandomNum(),$_input);


$_status
 =
$_res["status"];


if($_status==1){



if($_res["user_category"]==1){




$_ask_api = $this->_apis["loginauth"];



}else{




$this->_log("Login success");




break;



}


}else if($_status==4){



$this->_log("已经扫码");


}else if($_status==2){



$this->_log("管理员拒绝");



break;


}else if($_status==3){



$this->_log("登录超时");



break;


}else{



if($_ask_api==$this->_apis["loginask"]){




$this->_log("请打开test.jpg,用微信扫码");



}else{




$this->_log("等待确认");



}


}


sleep(2);


$_index++;

}

/*if($_index>=60){


$this->_log("U亲,超时了");


return;

}*/

$this->_log("开始验证");

$_input["post"]
 = ["lang"=>"zh_CN","f"=>"json","ajax"=>1,"random"=>$this->getWxRandomNum(),"token"=>""];

$_input["refer"]
 = $this->_redirect_url;

$_res



= $this->fetch($this->_apis["bizlogin"],$_input);

$this->_log(print_r($_res,true));

if($_res["base_resp"]["ret"]!=0){


$this->_log("error = ".$_res["base_resp"]["err_msg"]);


return ;

}

$redirect_url

=
$_res["redirect_url"];//跳转路径

if(preg_match('/token=([d]+)/i', $redirect_url,$match)){//获取cookie


$this->setToken($match[1]);

}

$this->_log("验证成功,token: ".$this->getToken());
}
//下载二维码
private function _saveQRcode(){

$_input["refer"] = $this->_redirect_url;

$_res

= $this->fetch($this->_apis["qrcode"],$_input,"text");

$fp

 = fopen($this->_getSavePath(), "wb+") or die("open fails");

fwrite($fp,$_res) or die("fwrite fails");

fclose($fp);
}
private function _login($_username,$_password){

$_input["post"] = array(


'username'
=> $_username,


'pwd'

=> md5($_password),


'f'

 => 'json',


'imgcode'
=> ""

);

$_input["refer"] = "https://mp.weixin.qq.com";

$_res


= $this->fetch($this->_apis["login"],$_input);

if($_res["base_resp"]["ret"]!==0){


return Utils::error($_res["base_resp"]["err_msg"]);

}

$this->_redirect_url
=
"https://mp.weixin.qq.com".$_res["redirect_url"];//跳转路径

return Utils::success("ok");
}
function getWxRandomNum(){

return "0.".mt_rand(1000000000000000,9999999999999999);
}
/**
 * @param $url
 * @param null $_input
 * @param string $data_type
 * @return mixed
 * $_input= ["post"=>[],"refer"=>"",cookiefile='']
 */
function fetch( $url, $_input=null, $data_type='json') {

$ch = curl_init();

$useragent = isset($_input['useragent']) ? $_input['useragent'] : 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2)

 Gecko/20100101 Firefox/10.0.2';

//curl_setopt( $ch, CURLOPT_HTTPHEADER, $this->_headers); //设置HTTP头字段的数组

curl_setopt( $ch, CURLOPT_URL, $url );

curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );

curl_setopt( $ch, CURLOPT_AUTOREFERER, true );

curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );

curl_setopt( $ch, CURLOPT_POST, isset($_input['post']) );

if( isset($_input['post']) )

 curl_setopt( $ch, CURLOPT_POSTFIELDS, $_input['post'] );

if( isset($_input['refer']) )

curl_setopt( $ch, CURLOPT_REFERER, $_input['refer'] );

curl_setopt( $ch, CURLOPT_USERAGENT, $useragent );

curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, ( isset($_input['timeout']) ? $_input['timeout'] : 5 ) );

curl_setopt( $ch, CURLOPT_COOKIEJAR, ( isset($_input['cookiefile']) ? $_input['cookiefile'] :

 $this->_getCookieFile() ));

curl_setopt( $ch, CURLOPT_COOKIEFILE, ( isset($_input['cookiefile']) ? $_input['cookiefile'] :

 $this->_getCookieFile() ));

$result = curl_exec( $ch );

curl_close( $ch );

if ($data_type == 'json') {


$result = json_decode($result,true);

}

return $result;
}
//--------------------------------------------------------LOGIN END}

怎么调用?上码:

$arr = array(
'account'
=> '***',
'password' => '****',
'key'

=> "tmall",);$w


 =
new WeiSendAuto();$w->init($arr);if(!$w->getToken()){
die("NOT TOKEN!");}

以上就是php扫码登录如何实现的详细内容,更多请关注Gxl网其它相关文章!

内容总结

以上是为您收集整理的php扫码登录如何实现全部内容,希望文章能够帮你解决php扫码登录如何实现所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。

内容备注

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。


本文关键词:

联系我们

在线咨询:点击这里给我发消息

邮件:w420220301@qq.com