微信公众号获取用户信息
public function visitor_login(){ header('Access-Control-Allow-Origin: *'); header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept"); header('Access-Control-Allow-Methods: GET, POST, PUT'); $appid='********'; $appsecret='********'; if(!$_GET['code']){ //获取当前的url地址 $rUrl=urlencode("http://".$_SERVER['HTTP_HOST']."/Login/visitor_login/mobile/".I('mobile')."/verify/".I('verify').".html"); //带参数请求 $u="https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$appid."&redirect_uri=".$rUrl."&response_type=code&scope=snsapi_userinfo&state=getWxOpenid&connect_redirect=1#wechat_redirect"; //微信回调地址 //当scope的值为snsapi_userinfo时获取用户详细信息,但需要用户授权,为snsapi_base时静默授权,用户无感知,只能获取到openid redirect($u); }else{ $acc=access($appid,$appsecret,$_GET['code']); //获取access_token和openid $u="https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=$appid&grant_type=refresh_token&refresh_token=".$acc['refresh_token']; $u_info=getHttpJson($u); //用access_token和openid换取用户详细信息 $userinfo = "https://api.weixin.qq.com/sns/userinfo?access_token=".$u_info['access_token']."&openid=".$u_info['openid']; $user_data=getHttpJson($userinfo); /*接收到用户详细信息后的操作*/ } }
以下为用到的函数:
//获取refresh_token来换取access_token和openid function access($appid,$appsecret,$code){ $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$appid."&secret=".$appsecret."&code=".$code."&grant_type=authorization_code"; $data = getHttpJson($url); S('access_token', $data['access_token'], 7000); return $data; }
//get请求获取详细信息 function getHttpJson($url){ $ch=curl_init(); //设置传输地址 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //不验证证书下同 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // curl_setopt($ch, CURLOPT_URL, $url); //设置以文件流形式输出 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //接收返回数据 $data=curl_exec($ch); curl_close($ch); $jsonInfo=json_decode($data,true); return $jsonInfo; }