主頁(yè) > 知識(shí)庫(kù) > PHP實(shí)現(xiàn)的微信公眾號(hào)掃碼模擬登錄功能示例

PHP實(shí)現(xiàn)的微信公眾號(hào)掃碼模擬登錄功能示例

熱門(mén)標(biāo)簽:咸寧銷(xiāo)售電銷(xiāo)機(jī)器人系統(tǒng) 外呼系統(tǒng)能給企業(yè)帶來(lái)哪些好處 百度地圖標(biāo)注偏差 余姚電話(huà)機(jī)器人 百度地圖怎樣標(biāo)注圖標(biāo) 廣東廣州在怎么申請(qǐng)400電話(huà) 400電話(huà)蘭州申請(qǐng)請(qǐng) 電銷(xiāo)機(jī)器人問(wèn)門(mén)薩維品牌my 開(kāi)發(fā)地圖標(biāo)注類(lèi)網(wǎng)站

本文實(shí)例講述了PHP實(shí)現(xiàn)的微信公眾號(hào)掃碼模擬登錄功能。分享給大家供大家參考,具體如下:

PHP微信公眾號(hào)掃碼模擬登錄功能

功能只是將:https://github.com/huanz/wechat-mp-hack 改成PHP實(shí)現(xiàn)罷了.
之前有個(gè)休閑豆每日晨報(bào)訂閱號(hào)每天定時(shí)群發(fā)消息,去年微信突然要求一定要掃碼授權(quán)才能登錄,FK,然后就放棄了,前幾天看到早有人使用程序掃碼登錄,獲取token,cookie自動(dòng)群發(fā)了,閑著也是閑著,就將js改成php實(shí)現(xiàn)了登錄功能.

主要流程如下

1,先訪問(wèn)https://mp.weixin.qq.com/ ,模擬登錄,進(jìn)入二維碼頁(yè)面
2,帶著返回的cookie下載二維碼.程序后臺(tái)一直while循環(huán),等待掃描消息.
3,打開(kāi)下載的二維碼,微信掃碼,登錄成功,獲取token和cookie,然后后面就可以自由發(fā)揮了.

供上代碼.

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=asktoken=lang=zh_CNf=jsonajax=1",
    "loginask"   => "https://mp.weixin.qq.com/cgi-bin/loginqrcode?action=asktoken=lang=zh_CNf=jsonajax=1random=",
    "loginauth"   => "https://mp.weixin.qq.com/cgi-bin/loginauth?action=asktoken=lang=zh_CNf=jsonajax=1",
    "bizlogin"   => "https://mp.weixin.qq.com/cgi-bin/bizlogin?action=loginlang=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("[微信調(diào)度:".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{
      //尼瑪,先要獲取首頁(yè)!!!
      $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("已經(jīng)掃碼");
      }else if($_status==2){
        $this->_log("管理員拒絕");
        break;
      }else if($_status==3){
        $this->_log("登錄超時(shí)");
        break;
      }else{
        if($_ask_api==$this->_apis["loginask"]){
          $this->_log("請(qǐng)打開(kāi)test.jpg,用微信掃碼");
        }else{
          $this->_log("等待確認(rèn)");
        }
      }
      sleep(2);
      $_index++;
    }
    /*if($_index>=60){
      $this->_log("U親,超時(shí)了");
      return;
    }*/
    $this->_log("開(kāi)始驗(yàn)證");
    $_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"];//跳轉(zhuǎn)路徑
    if(preg_match('/token=([\d]+)/i', $redirect_url,$match)){//獲取cookie
      $this->setToken($match[1]);
    }
    $this->_log("驗(yàn)證成功,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"];//跳轉(zhuǎn)路徑
    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); //設(shè)置HTTP頭字段的數(shù)組
    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
}

怎么調(diào)用?上碼

$arr = array(
  'account'  => '***',
  'password' => '****',
  'key'    => "tmall",
);
$w       =  new WeiSendAuto();
$w->init($arr);
if(!$w->getToken()){
  die("NOT TOKEN!");
}

更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《PHP微信開(kāi)發(fā)技巧匯總》、《php curl用法總結(jié)》、《PHP網(wǎng)絡(luò)編程技巧總結(jié)》、《php字符串(string)用法總結(jié)》、《PHP中json格式數(shù)據(jù)操作技巧匯總》及《PHP針對(duì)XML文件操作技巧總結(jié)》

希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。

您可能感興趣的文章:
  • php微信公眾號(hào)開(kāi)發(fā)模式詳解
  • PHP實(shí)現(xiàn)微信公眾號(hào)驗(yàn)證Token的示例代碼
  • php實(shí)現(xiàn)微信公眾號(hào)創(chuàng)建自定義菜單功能的實(shí)例代碼
  • 微信公眾平臺(tái)開(kāi)發(fā)教程③ PHP實(shí)現(xiàn)微信公眾號(hào)支付功能圖文詳解
  • php微信公眾號(hào)開(kāi)發(fā)之快遞查詢(xún)
  • php微信公眾號(hào)開(kāi)發(fā)之校園圖書(shū)館
  • php微信公眾號(hào)開(kāi)發(fā)之歡迎老朋友
  • php微信公眾號(hào)開(kāi)發(fā)之關(guān)鍵詞回復(fù)
  • php微信公眾號(hào)開(kāi)發(fā)之圖片回復(fù)
  • 基于PHP的微信公眾號(hào)的開(kāi)發(fā)流程詳解

標(biāo)簽:巴彥淖爾 重慶 臨沂 銅陵 鷹潭 十堰 衡陽(yáng) 麗江

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PHP實(shí)現(xiàn)的微信公眾號(hào)掃碼模擬登錄功能示例》,本文關(guān)鍵詞  PHP,實(shí)現(xiàn),的,微信,公眾,號(hào)掃碼,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《PHP實(shí)現(xiàn)的微信公眾號(hào)掃碼模擬登錄功能示例》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于PHP實(shí)現(xiàn)的微信公眾號(hào)掃碼模擬登錄功能示例的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章