微信小程序授权一般可以获取用户的openid、昵称、头像、用户所在省和市、性别
①、首先引导用户点击授权按钮
<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); }
请发表评论