前端代码
handleWechatLogin() {
// 处理微信登录逻辑
wx.login({
success: function (res) {
if (res.code) {
var code = res.code;
// 发送 code 到后端服务器进行进一步的处理
// 在这里可以调用后端接口,将 code 发送到后端服务器
api.Wechatlogin({
code: code,
}).then(res => {
console.log(res);
// 假设你已经获取到了 encryptedData 和 iv
const encryptedData = res.result.openid; // 加密的用户信息
const iv = res.result.session_Key; // 解密算法的初始向量
// const sessionKey = 'FkkvpLu4HGiQXjU+4VMv2Q=='; // 后端返回的 session_key
// 调用微信解密函数解密用户信息
wx.getUserInfo({
encryptedData: encryptedData,
iv: iv,
success: function (res) {
console.log('解密后的用户信息:', res);
// 将用户的头像和昵称保存在小程序的全局数据中
getApp().globalData.avatarUrl = res.userInfo.avatarUrl;
getApp().globalData.nickName = res.userInfo.nickName;
// 在这里可以处理解密后的用户信息,比如将用户昵称、头像等显示在页面上
},
fail: function (err) {
console.error('解密失败:', err);
}
});
}).catch(err => {})
} else {
console.log('登录失败!' + res.errMsg);
}
},
fail: function () {
console.log('登录失败!');
}
});
},
1.首先调用微信的接口wx.login,获取到微信给的code。
2.然后将这个code 发送到后端服务器进行进一步的处理。(基本是用不到这段代码的,直接传到后端的接口里就行了,后端在进行处理)。
nodejs代码(也就是接口代码)
// 处理微信登录接口
router.post('/wechatlogin', (req, res) => {
const { code } = req.body;
const appid = 'wxe14e3281ee3f2b42';
const appsecret = 'c02dd1aba0a0ba733d4ec04313a90e97';
// 发送请求到微信接口
const wxLoginUrl = 'https://api.weixin.qq.com/sns/jscode2session';
const wxLoginParams = {
appid,
secret: appsecret,
js_code: code,
grant_type: 'authorization_code'
};
axios.get(wxLoginUrl, { params: wxLoginParams })
.then((response) => {
// 从微信接口响应中提取用户身份信息
const { openid, session_key } = response.data;
console.log( response.data);
// 创建新的 WechatloginModel 实例并保存到数据库
const wechatlogin = new WechatloginModel({
code,
openid,
session_key
});
return wechatlogin.save();
})
.then((data) => {
res.json({
code: 200,
message: '保存成功',
result: data
});
})
.catch((error) => {
console.error('保存失败:', error);
res.status(500).json({
code: 500,
message: '保存失败',
error: error.message
});
});
});
3.后端在拿到这个code之后,需要去微信公众平台(https://mp.weixin.qq.com/)
,去注册,拿到开发者ID」和「开发者密码」(AppID和AppSecret),将code还有AppID和AppSecret一起发送到微信的接口https://api.weixin.qq.com/sns/jscode2session中,获取到
openid和session_key。
4.后端然后再将openid和session_key返回给前端,前端通过调用微信解密函数( wx.getUserInfo)解密用户信息,在解密后的用户信息中,可以获取到用户的一些基本信息(头像,用户名,性别等)。
5.如果需要调微信的授权页面,调一个微信小程序自带的api就够了(wx.authorize)。