微信小程序解析unionid

微信小程序解析用户unionid等信息

  1. 调用wx.login获取 用户临时登录凭证code(有效期5分钟);
  2. 调用wx.getUserInfo获取加密过的数据encryptedData和解密参数iv;
  3. 将code、encryptedData、iv传给后台,并在后台调用微信auth.code2Session方法,然后将解析到的信息返回给前台。
    前端代码示例如下:
注意:这里的wx.login和wx.getUserInfo调用顺序,先调用getUserInfo后调用wx.login会导致获取到的code和getUserInfo返回的加密数据不匹配,从而可能会导致解析unionid等用户信息失败!血的教训。
var app = getApp();
const utils = require('util.js');
/**
 * 获取用户信息
 */
function getUserInfo(callback) {
  let _this = this;
  /**
   *1.判断用户是否授权过(获取用户信息)
   */
  wx.showLoading({
    title: '加载中...',
    mask: true
  })
  wx.getSetting({
    success: function (setting) {
      if (setting.authSetting['scope.userInfo']) {
        wx.login({
          success(loginRes){
            wx.getUserInfo({
              success: function (res) {
                console.log('getUserInfo获取用户信息:', res);
                let userInfo = res.userInfo;
                wx.request({
                  url: utils.baseUrl + 'index',
                  data: {
                    code: loginRes.code,
                    iv: res.iv,
                    encryptedData: res.encryptedData,
                  },
                  method: 'GET',
                  header: {
                    'content-type': 'application/json'
                  }, // 设置请求的 header
                  success: function (data) {
                    console.log('解析unionId:', data);
                    if (data.data.resultCode == '1') {
                      userInfo.openId = data.data.data.openId;
                      userInfo.unionId = data.data.data.unionId;
                      wx.setStorageSync('userInfo', userInfo);
                      //执行回调函数
                      if (callback) {
                        callback();
                      }
                      wx.hideLoading();
                    } else {
                      wx.hideLoading();
                      utils.showToast(data.data.resultMsg);
                    }
                  },
                  fail(err) {
                    wx.hideLoading();
                  }
                })
              },
              fail: function (err) {
                _this.getUserInfo();
              }
            })
          },
          fail(loginErr){
            wx.hideLoading();
          }
        })
      }
      else {
        //没有授权的情况,跳转到welcome页面
        _this.getUserInfo();
      }
    },
    fail(){
      wx.hideLoading();
    }
  })
}


module.exports = {
  getUserInfo: getUserInfo
}

后台代码示例,官方在文档中提供了:php,python,node.c++的示例代码,java版本,在网上可以搜的到,很多开发者在博客中提供了java示例代码,详情见官方文档服务端获取开放数据

ok,搞定收工!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值