微信公众平台获取微信用户(粉丝)的openid在公众号的开发中有很多用途,包括给用户发送消息,包括各种消息、模版消息等。在这里向需要获取openid的开发人员分享一下简单的流程及部分代码,和一些问题的解决方式,给初次接触微信openid的朋友们一个参考。目的只在于获取openid,至于优化及应用上请自由发挥。
openid是公众号的普通用户(粉丝)的一个唯一的标识,只针对当前的公众号有效。
下面以php语言为例介绍如何获取微信用户openid。
一、准备工作
首先你要有一个公众号,类型为服务号,还有一个外网可访问的域名(如果要映射公网服务器,需备案)。获取openid需要的公众号的 appid 和 secret(登录微信公众平台,在【开发】——>【基本配置】中的开发者ID(AppID)和 开发者密码(AppSecret)就是)。其次是设置网页授权域名(登陆微信公众平台,在【设置】——>【公众号设置】——>【功能设置】——>网页授权域名中按步骤操作并设置就好),这个域名就是你获取openid的web项目发布的域名,这里注意服务器请一定跑在80端口。
二、调用https://open.weixin.qq.com/connect/oauth2/authorize接口获取到code
public function getcode(){
//基本配置
$appid=**************;//这里填写你的appid
$redirect_uri=urlencode("http://*********/getuserinfo");//这里用你的网页授权回调地址替换一下
$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);
}
当用户用微信进入我们的网页并调用到getcode方法之后,若参数无误,设置的网页授权域名正确,微信就会重定向页面到我们提交的回调地址,同时我们想要的code也会被传过来。
三、得到code作为一个参数调用https://api.weixin.qq.com/sns/oauth2/access_token接口获取到openid
//回调函数
public function getuserinfo(){
$appid = "***********";//这里添加你的微信公众号appid
$secret = "***********";//这里添加你的微信公众号secret
//这里获取到了code
$code = $_GET['code'];
//第一步:取得openid
$oauth2Url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$appid."&secret=".$secret."&code=".$code."&grant_type=authorization_code";
$oauth2 = $this->http_curl($oauth2Url);
//accestoken
$access_token = $oauth2["access_token"];
//openid
$openid = $oauth2['openid'];
//第二步:根据全局access_token和openid查询用户信息
$get_user_info_url = "https://api.weixin.qq.com/sns/userinfo?access_token=".$access_token."&openid=".$openid."&lang=zh_CN";
$userinfo = $this->http_curl($get_user_info_url);
dump($userinfo);
}
function http_curl($url){
//用curl传参
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
//关闭ssl验证
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch,CURLOPT_HEADER, 0);
$output = curl_exec($ch);
curl_close($ch);
return json_decode($output, true);
}
四、注意事项
1.网页授权域名设置如果与提交的回调地址的域名不对应,微信是无法回调到的。
2.单纯的获取openid使用的授权方式是静态授权,不需要经过用户许可的(用户看不到授权的过程),而想要获取用户的头像昵称等信息是另一种授权(用户端会弹出授权窗口)。