zoukankan      html  css  js  c++  java
  • Thinkphp 微信网页授权登录

    1,建一个vendor类代码如下

    <?php
    
    class Wxlogin {
        
        # 你自己的
        private $app_id     = '';
        
        # 也是你自己的
        private $app_secret = '';
     
        /**
         * # +========================================================================
         * # | - @name        获取微信授权链接
         * # | - @author     cq <just_leaf@foxmail.com> 
         * # | - @copyright zmtek 2018-11-07
         * # +------------------------------------------------------------------------
         * # | - 1.获取微信授权链接
         * # +========================================================================
         */
        public function get_authorize_url($redirect_uri = '', $state = ''){
            $redirect_uri = urlencode($redirect_uri);
            return "https://open.weixin.qq.com/connect/qrconnect?appid={$this->app_id}&redirect_uri={$redirect_uri}&response_type=code&scope=snsapi_login&state={$state}#wechat_redirect";
        }
        
        /**
         * # +========================================================================
         * # | - @name        获取授权token
         * # | - @author     cq <just_leaf@foxmail.com> 
         * # | - @copyright zmtek 2018-11-07
         * # +------------------------------------------------------------------------
         * # | - 1.通过get_authorize_url获取到的code
         * # +========================================================================
         */
        public function get_access_token($code = ''){
            $token_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={$this->app_id}&secret={$this->app_secret}&code={$code}&grant_type=authorization_code";
            $token_data = $this->http($token_url);
            
            if($token_data[0] == 200){
                return json_decode($token_data[1], TRUE);
            }
            return FALSE;
        }
        
        /**
         * # +========================================================================
         * # | - @name        获取授权后的微信用户信息
         * # | - @author     cq <just_leaf@foxmail.com> 
         * # | - @copyright zmtek 2018-11-07
         * # +------------------------------------------------------------------------
         * # | - 1.获取授权后的微信用户信息
         * # +========================================================================
         */
        public function get_user_info($access_token = '', $open_id = ''){
            if($access_token && $open_id){
                $info_url = "https://api.weixin.qq.com/sns/userinfo?access_token={$access_token}&openid={$open_id}&lang=zh_CN";
                $info_data = $this->http($info_url);
                
                if($info_data[0] == 200){
                    return json_decode($info_data[1], TRUE);
                }
            }
            return FALSE;
        }
    
        /**
         * # +========================================================================
         * # | - @name        验证授权
         * # | - @author     cq <just_leaf@foxmail.com> 
         * # | - @copyright zmtek 2018-11-07
         * # +------------------------------------------------------------------------
         * # | - 1.验证授权
         * # +========================================================================
         */
        public function check_access_token($access_token = '', $open_id = ''){
            if($access_token && $open_id){
                $info_url = "https://api.weixin.qq.com/sns/auth?access_token={$access_token}&openid={$open_id}&lang=zh_CN";
                $info_data = $this->http($info_url);
                
                if($info_data[0] == 200){
                    return json_decode($info_data[1], TRUE);
                }
            }
            return FALSE;
        }
        
        /**
         * # +========================================================================
         * # | - @name        请求
         * # | - @author     cq <just_leaf@foxmail.com> 
         * # | - @copyright zmtek 2018-11-07
         * # +------------------------------------------------------------------------
         * # | - 1.请求
         * # +========================================================================
         */
        public function http($url, $method, $postfields = null, $headers = array()){
            $ci = curl_init();
            curl_setopt($ci, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
            curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, 30);
            curl_setopt($ci, CURLOPT_TIMEOUT, 30);
            curl_setopt($ci, CURLOPT_RETURNTRANSFER, true);
            switch ($method) {
                case 'POST':
                    curl_setopt($ci, CURLOPT_POST, true);
                    if (!empty($postfields)) {
                        curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
                        $this->postdata = $postfields;
                    }
                    break;
            }
            curl_setopt($ci, CURLOPT_URL, $url);
            curl_setopt($ci, CURLOPT_HTTPHEADER, $headers);
            curl_setopt($ci, CURLINFO_HEADER_OUT, true);
     
            $response = curl_exec($ci);
            $http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);
     
            curl_close($ci);
            return array($http_code, $response);
        }
    }

    html页面如下

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
              <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"/>
            <title>扫码登录</title>
            <script src="http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js" type="text/javascript" charset="utf-8"></script>
        </head>
        <body>
            <div id="wxqrcode"></div>
            
        </body>
        <script type="text/javascript">
            var obj = new WxLogin({
             self_redirect:false,
             id:"wxqrcode", 
             appid: "你的appid", 
             scope: "snsapi_login", 
             redirect_uri: "授权域名下的页面,扫码授权后会跳转",
             state: "随机加密MD5就行了",//自己存session
             style: "black或者white",
             // 加密之后的样式,要改自己解密去
             href: "data:text/css;base64,LmltcG93ZXJCb3ggLnFyY29kZSB7d2lkdGg6IDIwMHB4O30NCi5pbXBvd2VyQm94IC50aXRsZSB7ZGlzcGxheTogbm9uZTt9DQouaW1wb3dlckJveCAuaW5mbyB7d2lkdGg6IDIwMHB4O30NCi5zdGF0dXNfaWNvbiB7ZGlzcGxheTogbm9uZX0NCi5pbXBvd2VyQm94IC5zdGF0dXMge3RleHQtYWxpZ246IGNlbnRlcjt9"
             });
        </script>
    </html>

    你的redirect_uri所填下的页面如下,我以authorization为名

    /**
         * # +========================================================================
         * # | - @name        授权处理
         * # | - @author     cq <just_leaf@foxmail.com> 
         * # | - @copyright zmtek 2018-11-07
         * # +------------------------------------------------------------------------
         * 
         * # +========================================================================
         */    
        public function authorization() {
            
            $code  = $_GET['code'];
            $state = $_GET['state'];
            
            if(!$code || !$state) die('参数不能为空');
    
            # 验证参数,防刷
            if($state != session('state')){
                die('错误state');
            }
    Vendor('Wxlogin.wxlogin');
    $Wx = new Wxlogin(); # 确认授权后会,根据返回的code获取token $token = $Wx->get_access_token($_GET['code']); # 获取用户信息 $user_info = $Wx->get_user_info($token['access_token'],$token['openid']);      var_dump($user_info); }

    还有第二种方法,自己去看文档。不懂再问吧 qq137121172 备注微信网页授权登录

  • 相关阅读:
    Hbase flusher源码解析(flush全代码流程解析)
    HBase行锁原理及实现
    Hbase源码之 compact源码(二)
    hbase源码之 compact源码(一)
    手动下载jar包导入mvn repo的方法
    JAVA Api 调用Hbase报错锦集
    Hbase Filter之PrefixFilter
    Hbase Filter之FilterList
    windows环境中hbase源码编译遇到的问题
    Hbase put写入源码分析
  • 原文地址:https://www.cnblogs.com/leaf-cq/p/10278213.html
Copyright © 2011-2022 走看看