人生七十古来稀,十年少小,十年老弱,还有五十年,五十年再分成日夜,只有二十五年的风景,再加上刮风下雨,三灾六病,人这一辈子,所剩时间不多,不如好好写写代码

效果

微信小程序 getUserProfile 获取用户信息 iv encryptedData 参数_xcode

1 wxml 中定义的按钮

<button  bindtap="toLogin"  
lang="zh_CN" open-type='getUserInfo'>立即登录
</button>

2 对应的 js 中调用 结合 login 方法获取 code

我这里是在 进入页面时获取了 code

getWxCode() {
let that = this;
wx.login({
success: function (data) {
console.log(" wx.login ---success ")
that.setData({
wxCode: data.code
});
}
})
},

然后在调用登录方法时直接使用的这个code

toLogin(e) {
this.getUserInfoFunction(e,this.data.wxCode);
},
调用 getUserProfile 方法来获取微信的用户消息
getUserInfoFunction(e,code){
//获取微信用户信息
wx.getUserProfile({
desc: '用于完善资料', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
success: (res) => {
//保存微信用户信息
wx.setStorageSync('user_info', res.userInfo)
let avatarUrl = res.userInfo.avatarUrl;
let nickName = res.userInfo.nickName;
let province = res.userInfo.province;
let country = res.userInfo.country;
let gender = res.userInfo.gender;

let iv = res.iv;
let encryptedData = res.encryptedData;
let wxCode = code;

//在这里去调用 后台接口
//后台接口会根据 iv encryptedData wxCode
//来获取 openID 以及获取用户的基本信息

},
fail: (err) => {
console.log('err', err);
}
});
},

调用 api.weixin.qq.com 接口来获取用户的 openId

我这里是在 微信中调用的此api 接口,为了给大家演示效果,实际业务开发中,微信小程序中不可以调用此接口。

在你的 java 服务接口 或者 php 服务接口中调用 此 api 即可获取到 openId

let appid = "";
let secret = "";
let wxCode ="";
wx.request({
url: "https://api.weixin.qq.com/sns/jscode2session?appid=" + appid + "&secret=" + secret + "&js_code=" + wxCode + "&grant_type=authorization_code",
success: (res) => {
console.log(res);
let session_key = res.data.session_key;
let openid = res.data.openid;
})

3 第一次登录出现解密失败 第二次登录就可以了

引起的这个错误一般是 错误的流程:引导用户点击授权按钮(getUserProfile)=>调起授权(wx.getUserProfile)=>获取code(wx.login)=>请求后端、传输数据(code、iv等)=>后端解密并登陆。

正确的流程(本文所述)正确的流程:获取code(wx.show)=>引导用户点击授权按钮(getUserProfile)=>调起授权(wx.getUserProfile)=>请求后端、传输数据(code、iv等)=>后端解密并登陆。


完毕