微信跳转第三方网页,并获取用户的信息

第一步:将测试帐号的功能服务 网页授权获取用户基本信息 进行修改,域名即为第三方页面的域名。


微信跳转第三方网页,并获取用户的信息_第1张图片

第二步:公众号向用户提供链接

我的链接为 http://xxx.top/vote/index.php

第三步:编写代码

在vote下home模块index控制器下有如下方法

  public function index(){
        $appid = 'wx486ddaf6ea519b89';
        $redirect_uri = urlencode('http://xxx.top/vote/index.php/home/index/validUser');//将字符串以url编码
        $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=$appid&redirect_uri=$redirect_uri&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect";
        header("Location:".$url);
    }

此方法将调用validUser方法,用户同意授权,获取code

 public function validUser(){
    	$code = $_GET['code'];//预定义的$_GET变量用于收集来自method="get"
    	// echo $code;exit;
        $json = $this->access_token($code);
        $arr = json_decode($json,true);
        $arr = array_change_key_case($arr, CASE_LOWER);
        // print_r($arr);exit;
    	if (isset($arr['access_token']) && isset($arr['openid'])) {
    		$result = $this->getUserInfo($arr['access_token'],$arr['openid']);
            print_r($result);
            // $this->redirect('fans/index',array('opend'=>$userinfo['opendid']));
    	}else{
            echo "获取access_token失败".$json;
        }

    }

access_token方法如下,通过code换取网页授权access_token

private function access_token($code){
        $appid = "wx486ddaf6ea519b89";
        $appsecret = "c57cc1cc7a3a35ea7a65b27e238a36c3";
        $url ="https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&secret=$appsecret&code=$code&grant_type=authorization_code";
        $ret = https_request($url);
        return $ret;
    }

接下来获取用户信息

 //获取用户信息
    private function getUserInfo($access_token,$openid){
        $userinfo_url = "https://api.weixin.qq.com/sns/userinfo?access_token=$access_token&openid=$openid";
        $userinfo_json = https_request($userinfo_url);
        $userinfo_array = json_decode($userinfo_json,true);

        array_change_key_case($userinfo_array, CASE_LOWER);
        return $userinfo_array;//返回的是用户的信息
    }

其中用到的https_request方法是在common控制器下function.php中的函数。

function https_request($url){
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);       
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $data = curl_exec($curl);
    if (curl_errno($curl)) {
    	return 'ERROR'.curl_error($curl);

    }
    curl_close($curl);
    return $data;
}

你可能感兴趣的:(微信开发)