思路
第一步:用户同意授权获取code,调用接口https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect。
注意:将redirect_uri使用URLEncode对redirect_uri进行处理。
第二步:通过code换取网页授权access_token,调用接口https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code,如果成功会返回json串。
第三步:拉取用户信息,调用接口 https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
代码
public function index(){
$appid = "wxeb0e938d93501f5e";
$redirect_uri = urlencode("http://www.kangruyue.top/vote/index.php/home/index/getcode");
$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);
}
public function getcode(){
$code = $_GET["code"];
// echo $code;
$json = $this->access_token($code);
// echo $json;
$arr = json_decode($json,true);
$arr = array_change_key_case($arr,CASE_LOWER);
if(isset($arr['access_token']) && isset($arr['openid'])){
$this->userinfo($arr['access_token'],$arr['openid']);
}else{
echo '获取access_token出错' . $json;
}
}
public function access_token($code){
$appid = "wxeb0e938d93501f5e";
$appsecret = "c943ca1dbef087f1ce4d3474f3e1aedb";
$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;
}
public function userinfo($access_token,$openid){
$url = "https://api.weixin.qq.com/sns/userinfo?access_token=$access_token&openid=$openid&lang=zh_CN";
$json = https_request($url);
// echo $json;
$userinfo = json_decode($json,true);
$userinfo = array_change_key_case($userinfo,CASE_LOWER);
$fans = M('fans');
$data = $fans->where("openid='{$userinfo['openid']}'")->find();
if(empty($data)){
$fans->add($userinfo);
}
}