对于微信UnionID在公众平台以及小程序里面的获取 - 中土世界跳伞梦

对于微信UnionID在公众平台以及小程序里面的获取

首先介绍下UnionID的作用,在注册了微信开放平台(注意,这里是开放平台,不是微信公众平台)之后,同一个微信号在这个开放平台下的项目上面的UnionID都是统一的,通俗的说就是,小程序跟公众号项目在绑定了同一个开放平台之后对于一个微信号会公用一个UnionID,(PS openid 在小程序跟公众号项目里面肯定是不同的),这是为了方便公众号以及小程序项目用户的共用,同样app的用户使用微信登录也会获取到同样的UnionID,只要这些都是在一个开放平台之上就可以实现

介绍完UnionID的作用之后,下面谈一下如何获取

  1)公众号项目获取UnionID

    公众号获取相对来说简单一点,通过openid以及access_token来获取UnionID,

    官方链接 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140839

    对于前端来说,openid以及acess_token这两个参数都是后台来获取的,所以公众号获取UnionID 十分简单

  2)小程序获取UnionID 

    小程序对于获取UnionID的文档不是很清晰,或者说是官方文档的表述不清晰以及部分地方存在错误

    在查阅文档以及综合实践过后总结如下

    两种获取方式

    1)wx.login

      调用wx.login 来获取到临时登陆凭证,通过下面的接口来获取到UnionID

      https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code


这种方法有前提条件,开发者账号下存在同主体的公众号,并且用户关注了这个公众号,可以不用授权就能获取到UnionID


    2)wx.getUserInfo

      调用wx.getUserInfo来获取到用户的头像等基本信息,以及解密UnionID的敏感信息,

      这里有一点 官方文档里面提到 wx.getUserInfo方法的参数withCredentials 为 true 时,要求此前有调用过 wx.login 且登录态尚未过期,此时返回的数据会包含 encryptedData, iv 等敏感信息;当 withCredentials 为 false 时,不要求有登录态,返回的数据不

包含 encryptedData, iv 等敏感信息。

      改参数默认值为true,并且经过验证,不需要之前调用过wx.login就可以获取到解密UnionID的敏感信息(但是后台需要用到wx.login返回的code来获取一个session_key)

      这种方法需要用户第一次点击授权,用户选择确认授权才会获取到用户的基本信息以及解密UnionID的敏感信息,之后不需要再次授权,

      获取到解密UnionID的敏感信息之后,需要将这些信息发送到后台,由后台进行UnionID的解密工作

      这种方法不需要用户关注公众号