亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

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

2024-05-04 23:20:10
字體:
來源:轉載
供稿:網友

請先下載  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 <dodgepudding@gmail.com>
 *  @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.uuid/s+=/s+/"([^/"]+)/"http://www.49028c.com/",$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;
        }
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品丝袜久久久久久不卡| 亚洲国产成人久久综合一区| 日本一欧美一欧美一亚洲视频| 国产精品久久91| 国产欧美一区二区三区久久人妖| 日韩有码片在线观看| 色综合影院在线| 亚洲黄色成人网| 91精品国产自产在线观看永久| 国产成人97精品免费看片| 日韩av在线资源| 992tv在线成人免费观看| 国自在线精品视频| 97超级碰碰碰| 色老头一区二区三区| 国产精品丝袜久久久久久高清| 欧美日韩国产专区| 欧美亚洲激情在线| 国产成人91久久精品| 亚洲视频电影图片偷拍一区| 亚洲日本成人女熟在线观看| 欧美猛男性生活免费| 亚洲嫩模很污视频| 海角国产乱辈乱精品视频| 伊是香蕉大人久久| 日本不卡免费高清视频| 欧美国产欧美亚洲国产日韩mv天天看完整| 国产亚洲精品va在线观看| 日本伊人精品一区二区三区介绍| 久久精品国产久精国产思思| 亚洲无线码在线一区观看| 韩国v欧美v日本v亚洲| 国产精品久久久久av免费| 国产成人精品优优av| 亚洲va久久久噜噜噜| 欧美最猛黑人xxxx黑人猛叫黄| 成人欧美一区二区三区黑人孕妇| 亚洲成人久久久| 亚洲精选中文字幕| 国产日韩精品综合网站| 国产国语videosex另类| 欧美性生交大片免网| 国产精品久久久久av免费| 欧美国产日韩一区二区三区| 国模视频一区二区三区| 91美女片黄在线观看游戏| 国产一区二区在线播放| 中文日韩电影网站| 国产精品免费久久久| 日韩女在线观看| 国产在线视频欧美| 高清欧美性猛交| 欧美在线日韩在线| 午夜美女久久久久爽久久| 欧美插天视频在线播放| 亚洲成av人影院在线观看| 亚洲人成网7777777国产| 亚洲精品久久久久国产| 中文字幕日韩专区| 爱福利视频一区| 国产一级揄自揄精品视频| 97超级碰碰碰久久久| 国产精品永久免费在线| 亚洲精品国产综合区久久久久久久| 欧美一区二区三区艳史| 黄网动漫久久久| 国产亚洲成精品久久| 国模吧一区二区| 国产一区欧美二区三区| 久久久中精品2020中文| 国产成人亚洲综合91精品| 久久久爽爽爽美女图片| 欧美日韩在线视频观看| 亚洲国产高清福利视频| 欧美日韩亚洲精品一区二区三区| 成人欧美一区二区三区在线湿哒哒| 精品偷拍一区二区三区在线看| 国产精品视频免费在线| 国产精品久久久久久久久久久久久久| 国产日韩在线免费| 国产精品自拍网| 欧美激情视频免费观看| www.亚洲天堂| 日韩资源在线观看| 国产精品成人观看视频国产奇米| 亚洲精品国精品久久99热| 欧美激情综合色综合啪啪五月| 97国产suv精品一区二区62| 久久夜精品va视频免费观看| 91嫩草在线视频| 亚洲人成网站在线播| 国产精品久久久久久久久久小说| www.亚洲一二| 久久久精品在线| 亚洲精品久久久久中文字幕欢迎你| 久久久久国色av免费观看性色| 97久久精品视频| 精品国产老师黑色丝袜高跟鞋| 欧美国产在线视频| 一级做a爰片久久毛片美女图片| 成人h视频在线| 亚洲视频视频在线| 国产成人精品免费久久久久| 欧美午夜片欧美片在线观看| 欧美专区在线观看| 九九久久久久99精品| 国产91在线播放精品91| 亚洲91精品在线观看| 中文日韩电影网站| 亚洲精品在线观看www| 欧美自拍大量在线观看| 日韩精品视频在线| 欧美激情精品久久久久久变态| 国产欧美日韩丝袜精品一区| 亚洲午夜国产成人av电影男同| 欧美理论片在线观看| 色偷偷偷综合中文字幕;dd| 精品美女久久久久久免费| 国产成人精品av| 日本欧美国产在线| 97人人模人人爽人人喊中文字| 国产一区二区在线免费视频| 久久久久久久久久久91| 欧美日韩爱爱视频| 久热精品视频在线| 欧美精品做受xxx性少妇| 欧美综合一区第一页| 日韩在线视频观看| 热re91久久精品国99热蜜臀| 91精品久久久久久久久不口人| 色妞色视频一区二区三区四区| 欧美激情一区二区三区在线视频观看| 高清一区二区三区日本久| 日韩激情av在线播放| 97视频在线观看免费高清完整版在线观看| 亚洲一区二区三区在线免费观看| 欧美日韩国产专区| 国产精品电影一区| 久久精品视频在线观看| 久久精品视频va| 久久精品亚洲94久久精品| 在线播放日韩专区| 九九九热精品免费视频观看网站| 国产97在线视频| 国内精品久久久久影院 日本资源| 国产精品第七影院| 色婷婷久久一区二区| 亚洲精品国产美女| 国产精品日日做人人爱| 色婷婷av一区二区三区在线观看| 国产视频一区在线| 亚洲国产精久久久久久久| 日韩的一区二区| 性色av一区二区三区在线观看| 亚洲综合小说区| 欧美激情亚洲精品| 欧美综合一区第一页| 中文字幕亚洲综合久久| 国产99久久精品一区二区永久免费| 国内精品美女av在线播放| 色综合视频一区中文字幕| 亚洲第一男人av| 国产一区二区丝袜高跟鞋图片| 国产+成+人+亚洲欧洲|