①、首先引导用户点击授权按钮
<button open-type="getUserInfo" bindgetuserinfo="bindGetUserInfo">点击授权</button>
②、然后编写bindGetUserInfo函数:
bindGetUserInfo(res) {
console.log(res);
if (res.detail.userInfo) {
console.log("点击了同意授权");
} else {
console.log("点击了拒绝授权");
}
}
③、此时会出现一个弹出框
④、点击允许会返回用户除了openid以外的基本信息:
⑤、接着是获取用户openid,需要用到微信的wx.login函数
bindGetUserInfo(res) {
let info = res;
if (info.detail.userInfo) {
console.log("点击了同意授权");
wx.login({
success: function (res) {
console.log(res);
}
})
} else {
console.log("点击了拒绝授权");
}
此时为微信会返回一个临时登录凭证code,只有获取了这个code才能进一步获取openid 和session_key
⑦、请求服务端后台,让后台请求微信再返回openid和session_key,再用微信的本地缓存保存用户的基本信息
官方文档建议:会话密钥session_key 是对用户数据进行加密签名的密钥。为了应用自身的数据安全,开发者服务器不应该把会话密钥下发到小程序,也不应该对外提供这个密钥
请求前端代码:
bindGetUserInfo(res) {
let info = res;
console.log(info);
if (info.detail.userInfo) {
console.log("点击了同意授权");
wx.login({
success: function (res) {
if (res.code) {
wx.request({
url: 'http://www.test.com/test',
data: {
code: res.code,
nickName: info.detail.userInfo.nickName,
city: info.detail.userInfo.city,
province: info.detail.userInfo.province,
avatarUrl: info.detail.userInfo.avatarUrl
},
header: {
'content-type': 'application/json' // 默认值
},
success: function (res) {
var userinfo = {};
userinfo['id']=res.data.id;
userinfo['nickName'] = info.detail.userInfo.nickName;
userinfo['avatarUrl'] = info.detail.userInfo.avatarUrl;
wx.setStorageSync('userinfo', userinfo);
}
})
} else {
console.log("授权失败");
}
},
})
} else {
console.log("点击了拒绝授权");
}
}
请求后台代码
public static $appid='你的appid';
public static $secret='你的密钥';
public function test()
{
$params=Request::instance()->param();
$url="https://api.weixin.qq.com/sns/jscode2session?appid=".self::$appid."&secret=".self::$secret."&js_code=".$params['code']."&grant_type=authorization_code";
$data=$this->doCurl($url);
$info['openid']=$data->openid; //获取到用户的openid
$info['avatar']=$params['avatarUrl'];
$info['province']=$params['province'];
$info['city']=$params['city'];
$info['nickName']=$params['nickName'];
return json(['status'=>1]);
}
public function doCurl($url)
{
$curl = curl_init();
// 使用curl_setopt()设置要获取的URL地址
curl_setopt($curl, CURLOPT_URL, $url);
// 设置是否输出header
curl_setopt($curl, CURLOPT_HEADER, false);
// 设置是否输出结果
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
// 设置是否检查服务器端的证书
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
// 使用curl_exec()将CURL返回的结果转换成正常数据并保存到一个变量
$data = curl_exec($curl);
// 使用 curl_close() 关闭CURL会话
curl_close($curl);
return json_decode($data);
}
原博客legendheng:https://www.cnblogs.com/legendheng/p/9469173.html