微信公众号获取用户的openid

公众号可获得关注者的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的。对于不同公众号,同一用户的openid不同)。公众号可通过本接口来根据OpenID获取用户基本信息,包括昵称、头像、性别、所在城市、语言和关注时间。

对于微信开发者来说获取用户openid是最基本的操作了,然而还是有人不会获取,说报错,其实错误原因主要存在于:
1.你使用的公众号没有权限,一般认证服务号有次权限,部分订阅号也有;
2.在公众号后台没有配置网页授权域名。

微信公众号获取用户的openid_第1张图片
话不多说,直接上代码:

//设置网络请求配置
public function _request($curl,$https=true,$method='GET',$data=null){
	// 创建一个新cURL资源
	$ch = curl_init();
	
	// 设置URL和相应的选项
	curl_setopt($ch, CURLOPT_URL, $curl);    //要访问的网站
	curl_setopt($ch, CURLOPT_HEADER, false);    //启用时会将头文件的信息作为数据流输出。
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  //将curl_exec()获取的信息以字符串返回,而不是直接输出。 
 
	if($https){
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);  //FALSE 禁止 cURL 验证对等证书(peer's certificate)。
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true);  //验证主机
	}
	if($method == 'POST'){
		curl_setopt($ch, CURLOPT_POST, true);  //发送 POST 请求
		curl_setopt($ch, CURLOPT_POSTFIELDS, $data);  //全部数据使用HTTP协议中的 "POST" 操作来发送。
	}
	
	
	// 抓取URL并把它传递给浏览器
	$content = curl_exec($ch);
	if ($content  === false) {
	  return "网络请求出错: " . curl_error($ch);
	  exit();
	}
	//关闭cURL资源,并且释放系统资源
	curl_close($ch);
	
	return $content;
}
 
 
/**
 * 获取用户的openid
 * @param  string $openid [description]
 * @return [type]         [description]
 */
public function baseAuth($redirect_url){
	
	//1.准备scope为snsapi_base网页授权页面
	$baseurl = urlencode($redirect_url);
	$snsapi_base_url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid='.$this->appid.'&redirect_uri='.$baseurl.'&response_type=code&scope=snsapi_base&state=YQJ#wechat_redirect';
	
	//2.静默授权,获取code
	//页面跳转至redirect_uri/?code=CODE&state=STATE
	$code = $_GET['code'];
	if( !isset($code) ){
		header('Location:'.$snsapi_base_url);
	}
	
	//3.通过code换取网页授权access_token和openid
	$curl = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$this->appid.'&secret='.$this->appsecret.'&code='.$code.'&grant_type=authorization_code';
	$content = $this->_request($curl);
	$result = json_decode($content,true);
	
	return $result;
}

返回的结果如下表,其中的openid就是我们想要的。
微信公众号获取用户的openid_第2张图片

你可能感兴趣的:(微信支付方面,微信,服务器,前端)