小程序微信登录获取unionid
前端登录代码
//小程序自动登录
autoLogin(){
const that = this;
wx.login({
success(res) {
that.code = res.code
wx.getSetting({
success(res) {
if (res.authSetting['scope.userInfo']) {
// 已经授权,可以直接调用 getUserInfo 获取头像昵称
wx.getUserInfo({
success: function(res) {
//上传参数到服务器
that.doMiniProgramLogin(code, res.encryptedData, res.iv)
}
})
}
}
})
}
})
}
//小程序点击按钮登录
<button open-type="getUserInfo" @getuserinfo="getuserinfo" withCredentials="true">授权登录</button>
getuserinfo(e) {
let that = this;
wx.login({
success(res) {
const code = res.code
//上传参数到服务器
that.doMiniProgramLogin(code, e.detail.encryptedData, e.detail.iv)
}
})
}
服务端处理
//小程序登录
router.all('/miniProgramlogin',function(req, res, next){
var request = require("request");
const code = req.body.code;
const encryptedData = req.body.encryptedData;
const iv = req.body.iv;
let url = 'https://api.weixin.qq.com/sns/jscode2session?appid=' + miniProgram.appid
+'&secret=' + miniProgram.secret + '&js_code='
+ code + '&grant_type=authorization_code'
request(url, function (error, response, body){
if (!error && response.statusCode == 200){
let obj = JSON.parse(body)
if(obj.session_key){
let session_key = obj.session_key;
var WXBizDataCrypt = require('../utils/WXBizDataCrypt')//解密方法在微信开发文档可下载
var pc = new WXBizDataCrypt(miniProgram.appid, session_key)
var data = pc.decryptData(encryptedData , iv)
console.log('解密后 data: ', data)
}
}
})
})
解密方法:https://res.wx.qq.com/wxdoc/dist/assets/media/aes-sample.eae1f364.zip
或者前往https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html下载
注意
unionid获取需要前往微信开放平台(open.weixin.qq.com)绑定小程序后,才可以获取。