程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 微信掃描二維碼登錄網站代碼

微信掃描二維碼登錄網站代碼

編輯:關於PHP編程

     用戶通過掃描網頁提供的二維碼實現登陸信息獲取,大家參考使用吧

    請先下載  snoopy 類   代碼如下: <?php /**  *  微信公眾平台PHP-SDK  *  Wechatauth為非官方微信登陸API  *  用戶通過掃描網頁提供的二維碼實現登陸信息獲取  *  主要實現如下功能:  *  get_login_code() 獲取登陸授權碼, 通過授權碼才能獲取二維碼  *  get_code_image($code='') 將上面獲取的授權碼轉換為圖片二維碼  *  verify_code() 鑒定是否登陸成功,返回200為最終授權成功.  *  get_login_cookie() 鑒定成功後調用此方法即可獲取用戶基本信息  *  sendNews($account,$title,$summary,$content,$pic,$srcurl='') 向一個微信賬戶發送圖文信息  *  get_avatar($url) 獲取用戶頭像圖片數據  *  @author dodge <[email protected]>  *  @link https://github.com/dodgepudding/wechat-php-sdk  *  @version 1.1  *    */ include "snoopy.class.php"; class Wechatauth {         private $cookie;         private $_cookiename;         private $_cookieexpired = 3600;         private $_account = 'test';         private $_datapath = './data/cookie_';         private $debug;         private $_logcallback;         public $login_user; //當前登陸用戶, 調用get_login_info後獲取           public function __construct($options)         {                 $this->_account = isset($options['account'])?$options['account']:'';                 $this->_datapath = isset($options['datapath'])?$options['datapath']:$this->_datapath;                 $this->debug = isset($options['debug'])?$options['debug']:false;                 $this->_logcallback = isset($options['logcallback'])?$options['logcallback']:false;                 $this->_cookiename = $this->_datapath.$this->_account;                 $this->getCookie($this->_cookiename);         }         /**          * 把cookie寫入緩存          * @param  string $filename 緩存文件名          * @param  string $content  文件內容          * @return bool          */         public function saveCookie($filename,$content){                 return file_put_contents($filename,$content);         }           /**          * 讀取cookie緩存內容          * @param  string $filename 緩存文件名          * @return string cookie          */         public function getCookie($filename){                 if (file_exists($filename)) {                         $mtime = filemtime($filename);                         if ($mtime<time()-$this->_cookieexpired) return false;                         $data = file_get_contents($filename);                         if ($data) $this->cookie = $data;                 }                  return $this->cookie;         }           /*          * 刪除cookie          */         public function deleteCookie($filename) {                 $this->cookie = '';                 @unlink($filename);                 return true;         }           private function log($log){                 if ($this->debug && function_exists($this->_logcallback)) {                         if (is_array($log)) $log = print_r($log,true);                         return call_user_func($this->_logcallback,$log);                 }         }           /**          * 獲取登陸二維碼對應的授權碼          */         public function get_login_code(){                 if ($this->_logincode) return $this->_logincode;                 $t = time().strval(mt_rand(100,999));                 $codeurl = 'https://login.weixin.qq.com/jslogin?appid=wx782c26e4c19acffb&redirect_uri=https%3A%2F%2Fwx.qq.com%2Fcgi-bin%2Fmmwebwx-bin%2Fwebwxnewloginpage&fun=new&lang=zh_CN&_='.$t;                 $send_snoopy = new Snoopy;                  $send_snoopy->fetch($codeurl);                 $result = $send_snoopy->results;                 if ($result) {                         preg_match("/window.QRLogin.uuids+=s+"([^"]+)"/",$result,$matches);                         if(count($matches)>1) {                                 $this->_logincode = $matches[1];                                 $_SESSION['login_step'] = 0;                                 return $this->_logincode;                         }                 }                 return $result;         }           /**          * 通過授權碼獲取對應的二維碼圖片地址          * @param string $code          * @return string image url          */         public function get_code_image($code=''){                 if ($code=='') $code = $this->_logincode;                 if (!$code) return false;                 return 'http://login.weixin.qq.com/qrcode/'.$this->_logincode.'?t=webwx';         }           /**          * 設置二維碼對應的授權碼          * @param string $code          * @return class $this          */         public  function set_login_code($code) {                 $this->_logincode = $code;                 return $this;         }           /**          * 二維碼登陸驗證          *          * @return status:          * >=400: invaild code; 408: not auth and wait, 400,401: not valid or expired          * 201: just scaned but not confirm          * 200: confirm then you can get user info          */         public function verify_code() {                 if (!$this->_logincode) return false;                 $t = time().strval(mt_rand(100,999));                           $url = 'https://login.weixin.qq.com/cgi-bin/mmwebwx-bin/login?uuid='.$this->_logincode.'&tip=1&_='.$t;                         $send_snoopy = new Snoopy;                          $send_snoopy->referer = "https://wx.qq.com/";                         $send_snoopy->fetch($url);                         $result = $send_snoopy->results;                         $this->log('step1:'.$result);                         if ($result) {                                 preg_match("/window.code=(d+)/",$result,$matches);                                 if(count($matches)>1) {                                         $status = intval($matches[1]);                                         if ($status==201) $_SESSION['login_step'] = 1;                                         if ($status==200) {                                                 preg_match("/ticket=([0-9a-z-_]+)&lang=zh_CN&scan=(d+)/",$result,$matches);                                                 $this->log('step2:'.print_r($matches,true));                                                 if (count($matches)>1) {                                                         $ticket = $matches[1];                                                         $scan = $matches[2];                                                         $loginurl = 'https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage?ticket='.$ticket.'&lang=zh_CN&scan='.$scan.'&fun=new';                                                         $send_snoopy = new Snoopy;                                                          $send_snoopy->referer = "https://wx.qq.com/";                                                         $send_snoopy->fetch($loginurl);                                                         $this->log('step3:'.print_r($send_snoopy->headers,true));                                                         foreach ($send_snoopy->headers as $key => $value) {                                                                 $value = trim($value);                                                                 if(strpos($value,'Set-Cookie: ') !== false){                                                                         $tmp = str_replace("Set-Cookie: ","",$value);                                                                         $tmp = str_replace("Path=/","",$tmp);                                                                         $tmp = str_replace("Domain=.qq.com; ","",$tmp);                                                                         $cookie.=$tmp;                                                                 }                                                         }                                                         $cookie .="Domain=.qq.com;";                                                         $this->cookie = $cookie;                                                         $this->saveCookie($this->_cookiename,$this->cookie);                                                 }                                         }                                         return $status;                                 }                         }                 return false;         }           /**          * 獲取登陸的cookie          *          * @param bool $is_array 是否以數值方式返回,默認否,返回字符串          * @return string|array          */         public function get_login_cookie($is_array = false){                 if (!$is_array)        return $this->cookie;                 $c_arr = explode(';',$this->cookie);                 $cookie = array();                 foreach($c_arr as $item) {                         $kitem = explode('=',trim($item));                         if (count($kitem)>1) {                                 $key = trim($kitem[0]);                                 $val = trim($kitem[1]);                                 if (!empty($val)) $cookie[$key] = $val;                         }                 }                 return $cookie;         }           /**          *          授權登陸後獲取用戶登陸信息          */         public function get_login_info(){                 if (!$this->cookie) return false;                 $t = time().strval(mt_rand(100,999));                 $send_snoopy = new Snoopy;                  $submit = 'https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxinit?r='.$t;                 $send_snoopy->rawheaders['Cookie']= $this->cookie;                 $send_snoopy->referer = "https://wx.qq.com/";                 $send_snoopy->submit($submit,array());                 $this->log('login_info:'.$send_snoopy->results);                 $result = json_decode($send_snoopy->results,true);                 if ($result['BaseResponse']['Ret']<0) return false;                 $this->_login_user = $result['User'];                 return $result;         }           /**          *  獲取頭像          *  @param string $url 傳入從用戶信息接口獲取到的頭像地址          */         public function get_avatar($url) {                 if (!$this->cookie) return false;                 if (strpos($url, 'http')===false) {                         $url = 'http://wx.qq.com'.$url;                 }                 $send_snoopy = new Snoopy;                  $send_snoopy->rawheaders['Cookie']= $this->cookie;                 $send_snoopy->referer = "https://wx.qq.com/";                 $send_snoopy->fetch($url);                 $result = $send_snoopy->results;                 if ($result)                          return $result;                 else                         return false;         }           /**          * 登出當前登陸用戶          */         public function logout(){                 if (!$this->cookie) return false;                 preg_match("/wxuin=(w+);/",$this->cookie,$matches);                 if (count($matches)>1) $uid = $matches[1];                 preg_match("/wxsid=(w+);/",$this->cookie,$matches);                 if (count($matches)>1) $sid = $matches[1];                 $this->log('logout: uid='.$uid.';sid='.$sid);                 $send_snoopy = new Snoopy;                  $submit = 'https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxlogout?redirect=1&type=1';                 $send_snoopy->rawheaders['Cookie']= $this->cookie;                 $send_snoopy->referer = "https://wx.qq.com/";                 $send_snoopy->submit($submit,array('uin'=>$uid,'sid'=>$sid));                 $this->deleteCookie($this->_cookiename);                 return true;         } }  
    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved