美文网首页
微信授权

微信授权

作者: IT小池 | 来源:发表于2019-11-12 21:18 被阅读0次

    微信授权代码如下:

    <?php
    
    namespace wechat;
    
    /**
     * @package 微信授权控制器
     */
    
    class WechatOauth{
        //微信授权配置信息
        private $wechat_config = [
            'appid'     => '',
            'appsecret'     => '',
        ];
     
    
        public function __construct() {
            $this->wechat_config = $this->wechatConfig();
        }
    
        /**
         * 获取秘钥配置
         * @return [type] 数组
         */
        public function wechatConfig() {
            $wechat_config = array_merge($this->wechat_config,config('wechat.oauth'));
            return $wechat_config;
        }
    
         /**
         * 获取openid
         * @return string|mixed
         */
        public function getUserAccessUserInfo($code = ""){
            if(empty($code)){
                $baseUrl = request()->url(true);
                $url = $this->getSingleAuthorizeUrl($baseUrl, "123");                
                Header("Location: $url");
                exit();
            }else{
                $access_token = $this->getSingleAccessToken($code);
                return $this->getUserInfo($access_token);
            }
    
        }
    
        /**
         * 微信授权链接
         * @param  string $redirect_uri 要跳转的地址
         * @return [type]               授权链接
         */
        public function getSingleAuthorizeUrl($redirect_url = "",$state = '1') {
            $redirect_url = urlencode($redirect_url);
            return "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" . $this->wechat_config['appid'] . "&redirect_uri=".$redirect_url."&response_type=code&scope=snsapi_userinfo&state={$state}#wechat_redirect"; 
        }
    
        /**
         * 获取token
         * @return [type] 返回token 
         */
        public function getSingleAccessToken($code) {
            $url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$this->wechat_config['appid'].'&secret='.$this->wechat_config['appsecret'].'&code='.$code.'&grant_type=authorization_code';
            $access_token = $this->https_request($url);
            return $access_token;
        }
    
        /**
         * 发送curl请求
         * @param $url string
         * @param return array|mixed
         */
        public function https_request($url){
            $curl = curl_init();
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($curl, CURLOPT_URL, $url);
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
            $AjaxReturn = curl_exec($curl);
            //获取access_token和openid,转换为数组
            $data = json_decode($AjaxReturn,true);
            curl_close($curl);
            return $data;
        }
    
         /**
         * @explain
         * 通过code获取用户openid以及用户的微信号信息
         * @return array|mixed
         * @remark
         * 获取到用户的openid之后可以判断用户是否有数据,可以直接跳过获取access_token,也可以继续获取access_token
         * access_token每日获取次数是有限制的,access_token有时间限制,可以存储到数据库7200s. 7200s后access_token失效
         **/
        public function getUserInfo($access_token = []){
            if(!$access_token){
                return [
                    'code' => 0,
                    'msg' => '微信授权失败', 
                ];
            }
            $userinfo_url = 'https://api.weixin.qq.com/sns/userinfo?access_token='.$access_token['access_token'].'&openid='.$access_token['openid'].'&lang=zh_CN';
            $userinfo_json = $this->https_request($userinfo_url);
         
            //获取用户的基本信息,并将用户的唯一标识保存在session中
            if(!$userinfo_json){
                return [
                    'code' => 0,
                    'msg' => '获取用户信息失败!', 
                ];
            }
            return $userinfo_json;
        }
    }
    

    相关文章

      网友评论

          本文标题:微信授权

          本文链接:https://www.haomeiwen.com/subject/iuqcictx.html