在小程序里面有两个地方获取用户的openid。
一个是wx.login(OBJECT),第二个是wx.getUserInfo(OBJECT)。
这里我使用的是第一种wx.login(OBJECT)。
步骤
wx.login({
success: function(res) {
if (res.code) { // 第一步: 获取code
//发起网络请求
wx.request({
url: '后台接口', // 获取openid
data: {
code: res.code
}
})
} else {
console.log('获取用户登录态失败!' + res.errMsg)
}
}
});
后端的实现
后端的实现就是后端调用这个接口:https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code。
/*
* 根据code获取微信用户的openid
*/
router.get('/api/getWxCode', function(req, res, next) {
var param = req.query || req.params;
var code = param.code;
var urlStr = 'https://api.weixin.qq.com/sns/jscode2session?appid=' + wxConfig.AppID + '&secret=' + wxConfig.Secret + '&js_code=' + code + '&grant_type=authorization_code';
request(urlStr, function (error, response, body) {
if (!error && response.statusCode == 200) {
var jsBody = JSON.parse(body);
jsBody.status = 100;
jsBody.msg = '操作成功';
res.end(JSON.stringify(jsBody));
}
})
});
具体实例
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
var self = this;
wx.login({
success: function (res) {
if (res.code) {
//发起网络请求
wx.request({
url: 'https://www.hgdqdev.cn/api/getWxCode',
data: {
code: res.code
},
success: function(res){
if(res.data.status == 100){
self.setData({
openid: res.data.openid
})
}
},
fail: function(){
}
})
} else {
console.log('获取用户登录态失败!' + res.errMsg)
}
}
});
},