栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > PHP

微信扫描二维码登录网站代码示例

PHP 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

微信扫描二维码登录网站代码示例

请先下载  snoopy 类

复制代码 代码如下:

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);
        }
       
        public function savecookie($filename,$content){
                return file_put_contents($filename,$content);
        }

       
        public function getcookie($filename){
                if (file_exists($filename)) {
                        $mtime = filemtime($filename);
                        if ($mtime_cookieexpired) return false;
                        $data = file_get_contents($filename);
                        if ($data) $this->cookie = $data;
                }
                return $this->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;
        }

       
        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';
        }
       
       
        public  function set_login_code($code) {
                $this->_logincode = $code;
                return $this;
        }
       
       
        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;
        }
       
       
        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;
        }
       
       
        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;
        }
}

PS:本站还提供了一个功能十分强大的二维码工具供大家使用:

http://tools.jb51.net/transcoding/jb51qrcode

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/48907.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号