微信公众号授权并获取用户信息分为三部分:1:用户同意授权,获取code并跳转到微信授权页面并获取code授权返回值https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirectget参数说明:appid:微信唯一标识公众号appidredirect_uri:授权回调地址response_type:返回类型,填写codescope:授权方式:snsapi_base:静默授权(不弹出授权页面,直接跳转,只获取用户openid),snsapi_userinfo:获取用户状态的详细信息:回调时参数wechat_redirect:无论是直接打开还是制作页面重定向302时,必须带上这个参数2:使用代码交换网页授权access_token获取access_token接口https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_codeget参数说明:appid:微信唯一标识公众号appidsecret:微信公众号appsecretcode:微信授权返回的code值grant_type:fixedfilling:authorization_code调用上面接口返回数据如下:{"access_token":"ACCESS_TOKEN","expires_in":7200,"refresh_token":"REFRESH_TOKEN","openid":"OPENID","scope":"SCOPE"}如果使用静默授权,可以到此为止3:获取用户信息获取用户信息接口https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CNget参数说明:access_token:从上述接口获取的access_token。openid:从上述接口获取的openid,即用户的唯一标识。接口返回的数据如下:{"openid":"OPENID","nickname":NICKNAME,"sex":"1","province":"PROVINCE""city":"CITY","country"":"COUNTRY","headimgurl":"http://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46","privilege":["PRIVILEGE1""PRIVILEGE2"],"unionid":"o6_bmasdasdsad6_2sgVt7hMZOPfL"}根据上面的步骤原生php时间代码如下:publicfunctionactionGetMember(){//开启会话session_start();如果(!isset($_SESSION['member'])){//appid$appId='wx73d0c47a64aa5315';//秘密$appSecret='aba2793c10623350f6aeee5a728099d3';if(!isset($_GET['code'])){//授权$this->authorize($appId);}else{$code=$_GET['code'];//获取access_token和openID$res=$this->getAccessToken($appId,$appSecret,$code);$accessToken=$res['access_token'];$openId=$res['openid'];//获取用户信息$this->getMember($accessToken,$openId);$member=isset($_SESSION['member'])?$_SESSION['会员']:[];var_dump($member);}/**获取用户信息*/publicfunctiongetMember($accessToken,$openId){$params=[];$params['access_token']=$accessToken;$params['openid']=$openId;$params['lang']='zh_CN';$urlParams=$this->urlParams($params);$memberUrl='https://api.weixin.qq.com/sns/userinfo?'.$url参数;$member=$this->http_curl($memberUrl);$member=json_decode($member,true);$_SESSION['member']=$member;}/**授权*/publicfunctionauthorize($appId){//获取当前url$redirectUrl=$this->getUrl();$参数=[];$params['appid']=$appId;$params['redirect_uri']=$redirectUrl;$params['response_type']='code';$params['scope']='snsapi_userinfo';$params['state']='STATE';$urlParams=$this->urlParams($params);$url='https://open.weixin.qq.com/connect/oauth2/authorize?'.$urlParams.'#wechat_redirect';header('location:'.$url);}/**字符串拼接*/publicfunctionurlParams($params){$options='';foreach($paramsas$key=>$value){$options.=$key.'='。$值。'&';}$options=rtrim($options,'&');return$options;}/**获取当前url*/publicfunctiongetUrl(){//获取协议类型$protocalPort=isset($_SERVER['SERVER_PORT'])&&$_SERVER['SERVER_PORT']=='443'?'https://':'http://';//获取当前执行脚的url$phpSelf=$_SERVER['PHP_SELF']?$_SERVER['PHP_SELF']:$_SERVER['SCRIPT_NAME'];$pathInfo=isset($_SERVER['PATH_INFO'])?$_SERVER['PATH_INFO']:'';$queryString=isset($_SERVER['QUERY_STRING'])?$_SERVER['QUERY_STRING']:'';$relateUrl=isset($_SERVER['REQUEST_URI'])?$_SERVER['REQUEST_URI']:$phpSelf。(!empty($queryString)?'?'.$queryString:$pathInfo);$url=$协议端口。(isset($_SERVER['HTTP_HOST'])?$_SERVER['HTTP_HOST']:'')。$relateUrl;return$url;}/**获取access_token*/publicfunctiongetAccessToken($appId,$appSecret,$code){$params=[];$params['appid']=$appId;$params['秘密']=$appSecret;$params['代码']=$代码;$params['grant_type']='authorization_code';$urlParams=$this->urlParams($params);$url='https://api.weixin.qq.com/sns/oauth2/access_token?'.$url参数;$result=$this->http_curl($url);$result=json_decode($r结果,真实);return$result;}/**curl接口调用*/publicfunctionhttp_curl($url,$data=null){$curl=curl_init();curl_setopt($curl,CURLOPT_URL,$url);curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,0);curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,0);curl_setopt($curl,CURLOPT_POST,1);curl_setopt($curl,CURLOPT_POSTFIELDS,$data);$result=curl_exec($curl);curl_close($curl);返回$结果;}
