第一步:将测试帐号的功能服务 网页授权获取用户基本信息 进行修改,域名即为第三方页面的域名。
第二步:公众号向用户提供链接
我的链接为 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;
}