微信公众号网页授权:PHP获取微信用户昵称和头像
什么是网页授权?
当你在微信中打开一个公众号的网页时,如果想获取用户的微信昵称、头像等信息,就需要使用微信的"网页授权"功能。这就像是你去一个高级会所需要出示会员卡一样,微信需要确认你的网站确实属于这个公众号,才能放心地把用户信息交给你。
演示网站:gofly.v1kf.com
准备工作:设置网页授权域名
第一步:登录公众号后台
- 用电脑打开微信公众平台
- 扫码登录你的公众号账号
第二步:找到授权设置
- 在左侧菜单中找到【设置与开发】→【公众号设置】
- 点击【功能设置】选项卡
- 找到"网页授权域名"这一项
第三步:下载授权文件
- 点击"网页授权域名"后面的【设置】按钮
- 在弹出的窗口中,你会看到一个"下载授权文件"的链接,点击下载
- 这个文件通常命名为
MP_verify_xxxxxx.txt(xxxxxx是一串随机字符)
第四步:上传授权文件到你的服务器
- 将这个文件上传到你网站的根目录下
- 根目录就是你网站的主目录,比如访问
www.yourdomain.com/时所在的目录 - 如果你不确定根目录在哪里,可以咨询你的网站管理员或服务器提供商
- 根目录就是你网站的主目录,比如访问
- 确保可以通过网址直接访问到这个文件
- 例如:
www.yourdomain.com/MP_verify_xxxxxx.txt - 在浏览器中输入这个网址,应该能看到文件内容
- 例如:
第五步:填写并保存域名
- 回到公众号后台的设置页面
- 在输入框中填写你的网站域名(不需要带
http://或https://)- 例如:
www.yourdomain.com或yourdomain.com
- 例如:
- 点击【保存】按钮
注意:域名必须和你上传授权文件的域名完全一致,包括是否带www
技术实现:获取用户信息
设置好授权域名后,你的网站就可以通过微信的网页授权接口获取用户信息了。这个过程分为两步:
- 引导用户授权:用户访问你的网页时,系统会跳转到微信的授权页面
- 获取用户信息:用户同意授权后,微信会跳转回你的网站并带上一个code参数,你的服务器可以用这个code换取用户信息
示例代码(PHP)
// 第一步:构造授权URL
$redirect_uri = urlencode('https://www.yourdomain.com/callback.php'); // 授权后跳转的页面
$scope = 'snsapi_userinfo'; // 获取用户信息需要这个scope
$auth_url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=你的公众号APPID&redirect_uri={$redirect_uri}&response_type=code&scope={$scope}&state=STATE#wechat_redirect";
// 用户访问时重定向到授权页面
header("Location: $auth_url");
// callback.php 获取用户信息
$code = $_GET['code']; // 微信返回的code
// 第二步:用code换取access_token和openid
$token_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=你的公众号APPID&secret=你的公众号APPSECRET&code={$code}&grant_type=authorization_code";
$token_data = json_decode(file_get_contents($token_url), true);
// 第三步:用access_token获取用户信息
$userinfo_url = "https://api.weixin.qq.com/sns/userinfo?access_token={$token_data['access_token']}&openid={$token_data['openid']}&lang=zh_CN";
$userinfo = json_decode(file_get_contents($userinfo_url), true);
// 现在你可以使用用户信息了
echo "昵称:" . $userinfo['nickname'];
echo "头像:" . $userinfo['headimgurl'];
常见问题解答
Q:为什么我设置了授权域名还是获取不到用户信息?
A:请检查:
- 授权文件是否上传到了正确的目录
- 域名是否填写正确(包括是否带www)
- 服务器是否支持HTTPS(微信要求必须是安全域名)
Q:测试时为什么没有弹出授权页面?
A:可能是以下原因:
- 用户已经授权过(微信会记住授权状态)
- 你使用的scope是
snsapi_base(静默授权,不会弹出页面) - 在微信开发者工具中测试时,需要正确配置
Q:获取到的头像为什么是低分辨率的?
A:微信默认返回的是46×46像素的头像,如果需要高清头像,可以在获取用户信息后,将头像URL中的/0改为/132,例如:
http://thirdwx.qlogo.cn/mmopen/xxxx/0 → http://thirdwx.qlogo.cn/mmopen/xxxx/132
总结
通过以上步骤,你的公众号网页就可以安全地获取用户的微信昵称和头像了。记住,获取用户信息需要用户明确授权,所以一定要在用户知情并同意的情况下使用这些信息。
十年开发经验程序员,离职全心创业中,历时三年开发出的产品《唯一客服系统》
一款基于Golang+Vue开发的在线客服系统,软件著作权编号:2021SR1462600。一套可私有化部署的网站在线客服系统,编译后的二进制文件可直接使用无需搭开发环境,下载zip解压即可,仅依赖MySQL数据库,是一个开箱即用的全渠道在线客服系统,致力于帮助广大开发者/公司快速部署整合私有化客服功能。
开源地址:唯一客服(开源学习版)
官网地址:唯一客服官网
浙公网安备 33010602011771号