获取用户基本信息(UnionID机制)
在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的。对于不同公众号,同一用户的openid不同)。公众号可通过本接口来根据OpenID获取用户基本信息,包括昵称、头像、性别、所在城市、语言和关注时间。
请注意,如果开发者有在多个公众号,或在公众号、移动应用之间统一用户帐号的需求,需要前往微信开放平台(open.weixin.qq.com)绑定公众号后,才可利用UnionID机制来满足上述需求。
UnionID机制说明:
开发者可通过OpenID来获取用户基本信息。特别需要注意的是,如果开发者拥有多个移动应用、网站应用和公众帐号,可通过获取用户基本信息中的unionid来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号,用户的unionid是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。
获取用户基本信息(包括UnionID机制)
开发者可通过OpenID来获取用户基本信息。请使用https协议。
接口调用请求说明 http请求方式: GET https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
参数说明

返回说明
正常情况下,微信会返回下述JSON数据包给公众号:
{
"subscribe": 1,
"openid": "o6_bmjrPTlm6_2sgVt7hMZOPfL2M",
"nickname": "Band",
"sex": 1,
"language": "zh_CN",
"city": "广州",
"province": "广东",
"country": "中国",
"headimgurl":"http://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0",
"subscribe_time": 1382694957,
"unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL"
"remark": "",
"groupid": 0,
"tagid_list":[128,2],
"subscribe_scene": "ADD_SCENE_QR_CODE",
"qr_scene": 98765,
"qr_scene_str": ""
}参数说明

实例:thinkphp5+微信公众号获取用户基本信息
<?php
namespace app\wxapiswh\controller;
use think\Controller;
error_reporting(0);
// 基本设置
class Weixin extends Controller
{
public function head_user(){
$weixin_config=\think\Db::name('wx_setupdb')->find();
$appid=$weixin_config['appid'];
$redirect_uri = urlencode ( 'https://www.tpxhm.com/wxapiswh/Weixin/getUser' );//将字符串以 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);//header() 函数向客户端发送原始的 HTTP 报头。
}
public function getUser(){
header("content-type:text/html;charset=utf-8");
$code = $_GET["code"];//预定义的 $_GET 变量用于收集来自 method="get" 的表单中的值。
if (isset($_GET['code'])){//判断code是否存在
$userinfo = $this->getUserInfo($code);
$nickname = $userinfo['nickname'];//获取nickname对应的值,即用户名
$headimgurl = $userinfo['headimgurl'];
$city = $userinfo['city'];
$country = $userinfo['country'];
$province = $userinfo['province'];
echo "<style >*{margin:0; padding:0;}body{max-width:640px; margin:0 auto}</style>\n";
echo "<!doctype html><html><head><meta content=\"width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0\" name=\"viewport\"><body>\n";
print '<div style="width:100%; height:100vh; margin:0 auto; background:#00161c"><div style="width:200px; margin:0 auto; border:2px solid #fff; border-radius:10px;">';
print '<img style=" display:block; margin:0 auto; padding-top:150px;" src="'.$headimgurl.'" width="180px" height="180px;" />';//打印输出
print '<h2 style="text-align:left;font-size:20px; color:#fff;font-weight:normal; line-height:24px; padding-top:5px;">用户名:'.$nickname.'</h2>';//打印输出
print '<h2 style="text-align:left; font-size:20px; font-weight:normal; color:#fff;line-height:24px; padding-top:5px;">城市:'.$country.'-'.$province.'-'.$city.'</h2>';//打印输出
print '</div></div>';
print '</body></html>';
}else{
echo "NO CODE";
}
}
public function getUserInfo($code)
{
$weixin_config=\think\Db::name('wx_setupdb')->find();
$appid=$weixin_config['appid'];
$appsecret = $weixin_config['appsecret'];
//Get access_token
$access_token_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&secret=$appsecret&code=$code&grant_type=authorization_code";
$access_token_json = $this->https_request($access_token_url);//自定义函数
$access_token_array = json_decode($access_token_json,true);//对 JSON 格式的字符串进行解码,转换为 PHP 变量,自带函数
//获取access_token
$access_token = $access_token_array['access_token'];//获取access_token对应的值
//获取openid
$openid = $access_token_array['openid'];//获取openid对应的值
//Get user info
$userinfo_url = "https://api.weixin.qq.com/sns/userinfo?access_token=$access_token&openid=$openid&lang=zh_CN";
$userinfo_json = $this->https_request($userinfo_url);
$userinfo_array = json_decode($userinfo_json,ture);
return $userinfo_array;
}
public function https_request($url)//自定义函数,访问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;
}
}效果:
