ホームページ > バックエンド開発 > PHPチュートリアル > WeChat で QR コードをスキャンして Web サイトにログインする コードの例_PHP チュートリアル

WeChat で QR コードをスキャンして Web サイトにログインする コードの例_PHP チュートリアル

WBOY
リリース: 2016-07-13 10:42:42
オリジナル
1641 人が閲覧しました

まずスヌーピークラスをダウンロードしてください

コードをコピーします コードは次のとおりです:

/**
* 微信公众平台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
 *  @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);
        }

/**
*/
public function getCookie($filename){
if (file_exists($filename)) {
$mtime = filemtime($filename);
if ($mtime

        /**
         * 通过授权码获取对应的二维码图片地址
         * @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 .="ドメイン=.qq.com;";
$this->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 =爆発(';',$this-> ;cookie);
$cookie = array();
foreach($c_arr as $item) {
$kitem =explode('=',trim($item));
if (count($kiitem)>1 ) {
$key = トリム($kitem[0]);
$val = トリム($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 = 新しいスヌーピー;
$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('ログイン情報: '.$send_snoopy->results);
$result = json_decode($send_snoopy->results,true);
if ($result['BaseResponse']['Ret']<0) return false;
$ this->_login_user = $result['ユーザー'];
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 = 新しいスヌーピー;
$send_snoopy->rawheaders['Cookie']= $this->cookie;
$send_snoopy->referer = "https://wx.qq.com/";
$send_スヌーピー->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 = 新しいスヌーピー;
$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;
}
}

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/633592.html技術記事まず、スヌーピークラスのコピーコードをダウンロードしてください。 コードは次のとおりです: ?php /** * WeChat パブリック プラットフォーム PHP-SDK * Wechatauth は非公式の WeChat ログイン API * ユーザーは Web ページにある QR コードをスキャンすることでログインできます。 ..
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート