Heim  >  Artikel  >  Backend-Entwicklung  >  PHP-Beispiel für die OAuth2.0-Webseitenautorisierung der öffentlichen WeChat-Plattform

PHP-Beispiel für die OAuth2.0-Webseitenautorisierung der öffentlichen WeChat-Plattform

巴扎黑
巴扎黑Original
2016-11-11 17:40:281903Durchsuche

Benutzer können Anmeldeinformationen erhalten, indem sie den auf der Webseite bereitgestellten QR-Code scannen.
Bitte laden Sie zuerst den Snoopy-Kurs herunter.
/* *
* WeChat Public Platform PHP-SDK
* Wechatauth ist die inoffizielle WeChat-Anmelde-API
* Benutzer können Anmeldeinformationen erhalten, indem sie den auf der Webseite bereitgestellten QR-Code scannen
* Implementiert hauptsächlich die folgenden Funktionen:
* get_login_code() Rufen Sie den Anmeldeautorisierungscode ab. Der QR-Code kann über den Autorisierungscode abgerufen werden
* get_code_image($code='') Wandeln Sie den oben erhaltenen Autorisierungscode in den Bild-QR-Code um
* verify_code() Überprüfen Sie, ob bei erfolgreicher Anmeldung 200 zurückgegeben wird, wenn die endgültige Autorisierung erfolgreich ist
* get_login_cookie() Rufen Sie diese Methode auf, nachdem die Authentifizierung erfolgreich war, um die grundlegenden Informationen des Benutzers zu erhalten
* sendNews($account ,$title,$summary,$content,$pic, $srcurl='') Grafikinformationen an ein WeChat-Konto senden
* get_avatar($url) Benutzer-Avatar-Bilddaten abrufen
* @author dodge
* @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 $_debug; 🎜> public $login_user; // aktueller Login-Benutzer, rufen Sie get_login_info auf, um

öffentliche Funktion __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->_cookiename = $this-> ;_datapath.$this->_account;
                                                                                                                                                                                          = filemtime($filename);
                        if ($mtime_cookieexpired) return false; 
                        $data = file_get_contents($filename); 
                        if ($data) $this->cookie = $data; 
                } 
                return $this->cookie; 
        } 

          $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); 
                } 
        } 

        /**
* Erhalten Sie den Autorisierungscode, der dem Login-QR-Code entspricht
*/ 
        öffentliche Funktion get_login_code(){ 
                if ($this-> _logincode) geben $this->_logincode zurück ; 
                $t = time().strval(mt_rand(100,999)); 
                $codeurl = 'https://login.weixin.qq.com/jslogin?appid=wx782c26e4c19acffb&redirect_uri=https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage&fun=new&lang=zh_CN&_=' .$t; 
                $send_snoopy = neuer 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]; 
                    🎜>                              return $this->_logincode;                         } 
                } 
                return $result; 
        } 

        /**
* Erhalten Sie die entsprechende QR-Code-Bildadresse über den Autorisierungscode
* @param string $code
* @return string image url
*/ 
        öffentliche Funktion get_code_image($code=''){ 
                if ($code=='') $code = $this- >_logincode; 
                if (!$code) return false; 
                return 'http://login.weixin.qq.com/qrcode/'.$this->_logincode.'?t=webwx'; 
        } 

        /**
* Legen Sie den Autorisierungscode fest, der dem QR-Code entspricht
* @param string $code
* @return class $this
*/ 
        öffentliche Funktion set_login_code($code) { 
                $this->_logincode = $code; 
                return $this; 
        } 

        /** 
         * 二维码登陆验证 
         * 
         * @return status: 
         * >=400: ungültiger Code; 408: nicht authentifizieren und warten, 400.401: nicht gültig oder abgelaufen 
         * 201: nur gescannt, aber nicht bestätigen 
         * 200: bestätigen, dann können Sie Benutzerinformationen erhalten 
        */ 
        öffentliche Funktion 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 = neuer 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; 
                                                                               -9a-z-_] )&lang=zh_CN&scan=(d )/",$result,$matches); 
                                               $this->log('step2:'.print_r($matches,true)); 
                                                                                     $ticket = $matches[1]; 
                                                       $scan = $matches[2]; 
                                                     $loginurl = 'https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage?ticket='.$ticket.'&lang=zh_CN&scan='.$scan.'& Spaß=neu'; 
                                                        $send_snoopy = neuer 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; 
        } 

        /**
* Anmelde-Cookie abrufen
* * @param bool $is_array Ob in numerischer Form zurückgegeben werden soll, der Standardwert ist „Nein“, Rückgabezeichenfolge
**/ Keks; 
                $c_arr = explosion(';',$this->cookie); 
                $cookie = array(); 
                foreach($c_arr as $item) { 
                        $kitem = explosion('=',trim($item)); 
                        if (count($kitem)>1) { 
                                $key = trim($kitem[0]); 
                                $val = trim($kitem[1]); 
                                if (!empty($val)) $cookie[$key] = $val; 
                        } 
                } 
                return $cookie; 
        } 

        /**
* Benutzeranmeldeinformationen nach autorisierter Anmeldung erhalten
*/ 
        öffentliche Funktion get_login_info(){ 
                if (!$this->cookie) return false; 
                $t = time().strval(mt_rand(100,999)); 
                $send_snoopy = neuer 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; 
        } 

        /**
* Avatar abrufen
* * @param string $url Übergeben Sie die von der Benutzerinformationsschnittstelle erhaltene Avatar-Adresse
*/ 
        öffentliche Funktion get_avatar($url) { 
                if (!$this->cookie) return false; 
                if (strpos($url, 'http')===false) { 
                        $url = 'http://wx.qq.com'.$url; 
                } 
                $send_snoopy = neuer 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; 
        } 

        /**
* Melden Sie den aktuell angemeldeten Benutzer ab
*/ 
        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 = neuer 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; 
        } 
}

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn