微信公众号授权获取用户信息
https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html
1、token文件 同上一篇文章
2、配置文件 同上一篇文章
3、用户扫码跳转微信授权页面 code.php
include "conf.php";
// 微信端授权登录---生成二维码 $code_url="https://open.weixin.qq.com/connect/oauth2/authorize?appid=$appid&redirect_uri=$re_url&response_type=code&scope=$scope&state=$state#wechat_redirect";
include 'phpqrcode.php'; // 官网下载地址 https://sourceforge.net/projects/phpqrcode/files/
$QR=time()'.png'; // 二维码图片名称 防止缓存
$errorLevel = "L"; //定义纠错级别
$size = "4"; //定义生成内容
QRcode::png($code_url, $QR, $errorLevel, $size, 2); // 执行生成图片
echo '<img src="'.$QR.'">'; //输出二维码
注意:二维码生成目录必须有创建写入文件权限
edirect_uri 是 授权后重定向的回调链接地址, 请使用 urlEncode 对链接进行处理
4、也可是使用用户微信端打开连接 (与 第3 步 执行方式不同)code.php
include "conf.php"; //https://mp.weixin.qq.com/cgi-bin/settingpage?t=setting/function&action=function&token=782251143&lang=zh_CN //网页授权域名 域名/wx,不带 http:// $code_url="https://open.weixin.qq.com/connect/oauth2/authorize?appid=$appid&redirect_uri=$re_url&response_type=code&scope=$scope&state=$state#wechat_redirect"; header("Location:".$code_url); exit;
注意:如果请问code是遇见 code been used, hints: [ req_id: Rwakxa0262th10 ],请刷新文件以及生成的二维码,在访问、测试
5、通过用户点击同意授权获取用户信息 回调文件(code.php 文件中 $re_url 文件)wx_callback.php
include "conf.php"; // 引入配置文件 if(isset($_GET['code']) && isset($_GET["state"])) { if($state!=$_GET["state"]) { exit("state_error"); } $code=$_GET['code']; $token_url="https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&secret=$appsecret&code=$code&grant_type=authorization_code"; $token_resturn=https_get($token_url); $token_data=json_decode($token_resturn,true); //如果请求 access_token 失败 if(isset($token_data["errcode"])) { exit($token_data["errmsg"]); } $openid=$token_data["openid"]; $web_access_token=$token_data["access_token"]; $refresh_token=$token_data["refresh_token"]; // 验证access_token 是否有效 $refresh_url="https://api.weixin.qq.com/sns/auth?access_token=$web_access_token&openid=$openid"; $refresh_info=https_get($refresh_url); $refresh_info=json_decode($refresh_info,true); // 如果access_token 过期 if($refresh_info["errcode"]!==0) { // 刷新 access_token $refresh_access_token="https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=$appid&grant_type=refresh_token&refresh_token=$refresh_token"; $refresh_resturn=https_get($refresh_access_token); $refresh_data=json_decode($refresh_resturn,true); // 如果刷新获取失败 if(isset($refresh_data["errcode"])) { exit($refresh_data["errmsg"]); } // 如果成功再次赋值 $web_access_token=$refresh_data["access_token"]; $refresh_token=$refresh_data["refresh_token"]; } // 拉取用户信息 $user_url="https://api.weixin.qq.com/sns/userinfo?access_token=$web_access_token&openid=$openid&lang=zh_CN"; $user_info=https_get($user_url); $user_info=json_decode($user_info,true); // 如果获取用户信息失败 if(isset($user_info["errcode"])) { exit($user_info["errmsg"]); } /*$v=var_export($user_info,TRUE); // 获取用户信息写入数据库 测试 file_put_contents("callback.txt",$v);*/ }
注意:如果用户同意授权,页面将跳转至 redirect_uri/?code=CODE&state=STATE; 如果服务不支持 redirect_uri/ 这个种访问请问另外配置
6、 tp3项目的nginx 服务器配置示例:
#/模块名/控制器名/方法名
location /Home/Wx/User/ { rewrite ^/Home/Wx/User/?(.*)$ /index.php?m=Home&c=Wx&a=User&$1 last; #去除回调文件后面的 / break; }
注意: 微信端打开的页面如果文件中存在错误,只显示无法显示、打开网页;没有错误提示,try cathc 捕获不到错误。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现