小程序,unionid

UnionID机制说明

如果开发者拥有多个移动应用、网站应用、和公众帐号(包括小程序),可通过unionid来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号(包括小程序),用户的unionid是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。总的来说,unionid是唯一的。

UnionID获取途径

1、调用接口wx.getUserInfo,从解密数据中获取UnionID。注意本接口需要用户授权,请开发者妥善处理用户拒绝授权后的情况。

2、如果开发者帐号下存在同主体的公众号,并且该用户已经关注了该公众号。开发者可以直接通过wx.login获取到该用户UnionID,无须用户再次授权。

3、如果开发者帐号下存在同主体的公众号或移动应用,并且该用户已经授权登录过该公众号或移动应用。开发者也可以直接通过wx.login获取到该用户UnionID,无须用户再次授权。

以下是第一种获取途径,话不多说,直接上代码,其中已经包含注释解析:

onLoad: function () {

  wx.login({//第一:需要登录

    success: function(res){

      // 获取session_key和openid的前提条件:1、appid,需要通过微信认证;2、appSecrete;3、登录返回的code

      var code = res.code;//code,用于获取session_key和openid

      if(code){

        //将code发送给服务器,用于换取session_key和openid

        var session_key, openid;//假装此处存在session_key和openid,嘿嘿。。。

      }

      wx.getSetting({//第二:获取用户的当前设置。

        success: function(res){

          wx.authorize({//第三:在调用需授权 API 之前,提前向用户发起授权请求

            scope: 'scope.userInfo',//允许获取用户信息权限

            success: function(res){

              wx.getUserInfo({//第四:获取用户信息,前面需要先调用wx.login接口,并且需要用户授权,已完成

                success:function(res){

                  //这就是需要进行解密的信息,里面包含敏感数据在内的完整用户信息的加密数据

                  var encryptedData = res.encryptedData;

                  //加密算法的初始向量

                  var iv = res.iv;

                  // 此时session_key、openid、encryptedData和iv都有了,将这四个数据传给服务器进行解密,获取经过解密之后的信息,其中就包含unionid,如何使用这个unionid,看你自己的了,我一般是缓存起来

                }

              })

            }

          })

        }

      })

    }

  })

},