小程序微信登录获取unionid

小程序微信登录获取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)绑定小程序后,才可以获取。