本文实例讲述了PHP实现的微信公众号扫码模拟登录功能。分享给大家供大家参考,具体如下:
PHP微信公众号扫码模拟登录功能
功能只是将:https://github.com/huanz/wechat-mp-hack 改成PHP实现罢了.
之前有个休闲豆每日晨报订阅号每天定时群发消息,去年微信突然要求一定要扫码授权才能登录,FK,然后就放弃了,前几天看到早有人使用程序扫码登录,获取token,cookie自动群发了,闲着也是闲着,就将js改成php实现了登录功能.
主要流程如下
1,先访问https://mp.weixin.qq.com/ ,模拟登录,进入二维码页面
2,带着返回的cookie下载二维码.程序后台一直while循环,等待扫描消息.
3,打开下载的二维码,微信扫码,登录成功,获取token和cookie,然后后面就可以自由发挥了.
供上代码.
class WeiSendAuto { //--------------------------------------------------------LOGIN START private $_apis = [ "host" => "https://mp.weixin.qq.com", "login" => "https://mp.weixin.qq.com/cgi-bin/bizlogin", "qrcode" => "https://mp.weixin.qq.com/cgi-bin/loginqrcode", "loginqrcode" => "https://mp.weixin.qq.com/cgi-bin/loginqrcode", "loginask" => "https://mp.weixin.qq.com/cgi-bin/loginqrcode", "loginauth" => "https://mp.weixin.qq.com/cgi-bin/loginauth", "bizlogin" => "https://mp.weixin.qq.com/cgi-bin/bizlogin" ]; 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']) "htmlcode">$arr = array( 'account' => '***', 'password' => '****', 'key' => "tmall", ); $w = new WeiSendAuto(); $w->init($arr); if(!$w->getToken()){ die("NOT TOKEN!"); }更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP微信开发技巧汇总》、《php curl用法总结》、《PHP网络编程技巧总结》、《php字符串(string)用法总结》、《PHP中json格式数据操作技巧汇总》及《PHP针对XML文件操作技巧总结》
希望本文所述对大家PHP程序设计有所帮助。
华山资源网 Design By www.eoogi.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
华山资源网 Design By www.eoogi.com
暂无评论...
更新日志
2024年11月20日
2024年11月20日
- 柏菲·珞叔作品集《金色大厅2》限量开盘母带ORMCD[低速原抓WAV+CUE]
- Gareth.T《sad songs(Explicit)》[320K/MP3][29.03MB]
- Gareth.T《sad songs(Explicit)》[FLAC/分轨][152.85MB]
- 证声音乐图书馆《海风摇曳·盛夏爵士曲》[320K/MP3][63.06MB]
- 龚玥《金装龚玥HQCD》头版限量[WAV分轨]
- 李小春《吻别》萨克斯演奏经典[原抓WAV+CUE]
- 齐秦《辉煌30年24K珍藏版》2CD[WAV+CUE]
- 证声音乐图书馆《海风摇曳·盛夏爵士曲》[FLAC/分轨][321.47MB]
- 群星 《世界经典汽车音乐》 [WAV分轨][1G]
- 冷漠.2011 《冷漠的爱DSD》[WAV+CUE][1.2G]
- 陈明《流金岁月精逊【中唱】【WAV+CUE】
- 群星《Jazz-Ladies1-2爵士女伶1-2》HQCD/2CD[原抓WAV+CUE]
- 群星《美女私房歌》(黑胶)[WAV分轨]
- 郑源.2009《试音天碟》24BIT-96KHZ[WAV+CUE][1.2G]
- 飞利浦试音碟 《环球群星监听录》SACD香港版[WAV+CUE][1.1G]