国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

PHP實現的微信公眾號掃碼模擬登錄功能示例

2024-05-05 00:09:22
字體:
來源:轉載
供稿:網友

本文實例講述了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?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程序設計有所幫助。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 遂溪县| 南乐县| 廊坊市| 霸州市| 遂昌县| 河西区| 卢龙县| 昔阳县| 航空| 聂拉木县| 大石桥市| 敦煌市| 金山区| 定安县| 樟树市| 武乡县| 铅山县| 双鸭山市| 德钦县| 克什克腾旗| 云林县| 深泽县| 阿鲁科尔沁旗| 陇南市| 龙川县| 海丰县| 博兴县| 泰州市| 剑河县| 柳林县| 行唐县| 宁晋县| 噶尔县| 南木林县| 正宁县| 阿图什市| 萝北县| 柯坪县| 华阴市| 宁晋县| 丽水市|