|
根据微信小程序开发文档,获取用户信息的接口有3个UserInfo,wx.getUserInfo,wx.getUserProfile。
UserInfo比较老就不用了。wx.getUserInfo基础库版本 2.3.1 以后支持,但是必须用户授权 scope.userInfo。
wx.getUserProfile 基础库 2.10.4 开始支持,获取用户信息。页面产生点击事件(例如 button 上 bindtap 的回调中)后才可调用,每次请求都会弹出授权窗口,用户同意后返回 userInfo。该接口用于替换 wx.getUserInfo。
//用户授权
wx.authorize({
scope: 'scope.userInfo',
success(res) {
wx.startRecord();
}
});
//查看微信小程序接口是否可用
console.log('wx.getUserProfile', wx.canIUse('getUserProfile'))
wx.getUserInfo获取用户信息
// 获取微信用户信息
wx.getUserInfo({
success: function(res) {
//用户信息
const userInfo = res.userInfo;
//性别 0:未知、1:男、2:女
const {
nickName,
avatarUrl,
gender,
province,
city,
country
} = userInfo;
console.log(res)
let userUrl = userInfo.avatarUrl;//微信头像
let wxname = userInfo.nickName;//微信昵称
},
fail: res => {
// 获取失败的去引导用户授权
uni.showToast({
title: '您需要授权,才能获取您的信息!'
});
}
});
wx.getUserProfile 获取用户信息,获取openid,思路如下wx.login获取code,然后调微信服务端接口
'https://api.weixin.qq.com/sns/jscode2session?appid=' + appId + '&secret=' + APP_SECRET + '&js_code=' +
code + '&grant_type=authorization_code' 就能得到openid和sessionKey。
WXBizDataCrypt是官网js提供的解密用户信息的。通过上述接口就能获取sessionKey,然后可以解密微信用户加密的信息。
wx.login({ success: function(data) {
let code=data.code;
//登录微信授权
wx.getUserProfile({
desc: '用于完善用户资料',
lang: 'zh_CN',
success: function(res) {
console.log('wx.getUserProfile=>用户允许了授权');
console.log(res.userInfo);
// console.log( res.rawData );
console.log(res.signature);
console.log(res.encryptedData);
console.log(res.iv);
that.userUrl = res.userInfo.avatarUrl;
that.wxname = res.userInfo.nickName;
var sessionKey = '';
var ed = res.encryptedData;
var eiv = res.iv;
var appId = ''; //AppID(小程序ID)
var APP_SECRET = ''; //AppSecret(小程序密钥)
wx.request({
//获取openid接口
url: 'https://api.weixin.qq.com/sns/jscode2session?appid=' + appId + '&secret=' + APP_SECRET + '&js_code=' +
code + '&grant_type=authorization_code',
data: {},
method: 'GET',
success: function(res) {
console.log(res.data)
that.userId = res.data.openid; //获取到的openid
uni.setStorage({
key: "lsopenid",
data: res.data.openid
})
sessionKey = res.data.session_key; //获取到session_key
//that.getPhoneNumber(res);//得到res.encryptedData后,需要解码才能得到openId
var pc = new WXBizDataCrypt(appId, res.data.session_key);
console.log(pc)
var data = pc.decryptData(ed,eiv);
console.log(data)
}
});
小程序端wx.getUserProfile()获取到userInfo,wx.login()获取到code,
这两个传给后端,code通过code2session接口获取到unionid,openid,session_key等;
原有的拿session_key解密encryptedData的逻辑不需要了,毕竟encryptedData也只是比userInfo多了openid和unionid。
*/
},
fail: function(res) {
console.log('wx.getUserProfile=>用户拒绝了授权');
console.log(res);
},
});
}});
来源:https://www.cnblogs.com/feipengting/p/14685150.html |