许多技术开发者一定会使用到encryptedData这个数据,通常它会和iv变量一起返回给开发者。
获取数据的目的:
通常我们需要知道使用微信小程序的用户信息,为了安全起见,腾讯的技术团队将他们按一个秘钥进行加密,我们可以通过解密算法,得到用户的昵称,头像,手机号码(这个是由其他小程序接口发起),性别,城市等多样数据,甚至还有一个很重要的数据,名为unionId,它具体有什么作用,我们下面会说到。
那么我们该怎么获取这个数据呢?
在微信开发者工具中,调用wx.getUserInfo,用户接受授权后,我们便可以获取到encryptedData和iv两个数据。
unionId的用途:
实际上,我们经常需要公众号、小程序、App,甚至多个小程序之间用户具有关联,而openid无法满足这一要求,同一个用户在不同的应用Openid都是不同的,但是如果它们一定会有共同的unionId。所以只要获取到了这一个,实际上它比openid更有作用,我们完全可以用unionId来取代它。
实际上我们在解密数据的时候也确实遇到一些问题,比如说解密encryptedData和iv需要用到一个特别的算法,这个在网上可以搜索到Java或其他语言版本,另外就是解密时还需要传入一个session_key,获取途径:需要前端wx.login获取到的code,传给后端后,后端通过调用微信官方jscode2session接口,可以得到。
最后,我们成功解密数据,里面的内容有:
{encryptedData: "05HKeIFk7D2F/f+43paEA5VoA2mYJnHbsZb4CODV7WizuJzbSuaR54jooa0LhvoHw5NMy139ynwp1icHGHqaamz+D3RLfWfATVJuj39eBBWut84iTUkaa4EfQFzLzrsL0EFE139v2NdHxBpY2AvGC2hVFGIxzHrHVcEQif7kjAaxL0cCr4GQ/W6bDgaOuPPwR6an9ftcUvFW2w1YAfdAmiQcoVAGb0e4ItSHYoUXJG2AN1fIgCWtK4HA/N12pBpISctlWPVi+zI5h6ebcAVlM3Cy+m6Ymh+nwAovelE7ivPY7NYESWIVH7DhtO6weoPkZ69Os2qbi6cG88s3nwsI36I4Mq4RdfVzX/s7Ys0/X/3HIB3RHQzPQLmqqCDcodfak0J+GmbNAcFHHGkQAqzcgd7/TR1wByXUg831gZTJRqkkKcPhNuWOFvI+lwQH8QS2QmtIZdR6ZQsPSK9B6wfEMJk5GP6Dj1sTyjn9mwjU6Sb4JSJf0eRx2euZO8lLqp4b"
errMsg: "getUserInfo:ok"
iv: "gJsfkIUBDic3jEy9p8PFgg=="
rawData: "{"nickName":"那些你很冒险的梦?","gender":1,"language":"zh_CN","city":"Hangzhou","province":"Zhejiang","country":"China","avatarUrl":"https://wx.qlogo.cn/mmopen/vi_32/DYAIOgq83eraF58h7JXqA6BzeDbibm9xTW1ZklTppDK5UXC3G7RibJrdtQUkibXNkAPkBicGnyKWXWhWzmGQt8fARA/132"}"
signature: "85c056f1b2e3c19f153450e60c85d66035e7ac2c"
userInfo: {nickName: "那些你很冒险的梦?", gender: 1, language: "zh_CN", city: "Hangzhou", province: "Zhejiang"}
__proto__: Object}
令人头疼的事情发生了,在这里我们发现根本没有unionId,那该怎么办呢?
原来需要注册一个微信开放平台账号,将你所需要的App、公众号、小程序关联起来,才会有一个统一的UnionId。