微信小程序中的openid和unionid及其java后端的实现
openId
是表示用户在你的当前应用中的唯一标示,比如小程序,微信公众号等,这些都算是一个应用,如果你有多个应用,同一个用户的openId可能并不相同
unionid
借用微信官方文档中的话来说,如果开发者拥有多个移动应用、网站应用、和公众帐号(包括小程序),可通过 UnionID 来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号(包括小程序),用户的 UnionID 是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的
服务端获取openid流程:
过程并不复杂,其实这里需要说一下的是,为什么会多了一步,开发者服务器去访问微信接口呢?其实,微信官方文档说得很清楚,如果appid和secret存在应用本地,应用本身是容易被破解和抓包,非常容易泄露的,会导致安全问题;因此,放到开发者的服务器去访问,能够保证一定的安全性,除非服务器被攻破,否则很难知道appid和secret的,而且现在微信官方在小程序的后台的request合法域名配置里也禁用了https://api.weixin.qq.com这个域名,所以在小程序端,现在是无法获取openid了。如下图:
Java后端的实现:
主要就是一个拼接jscode+appid+appsecret的get请求
controll里的的代码实现:
小程序端传入一个jscode就可以了,
请求成功的结果:
{"errcode":"null","unionid":"null","sessionKey":"WxtTYlJOFpYVfNmR4qROPQ==", "openid":"ouED70N3a8TEOl6kzwVbwtHSjuPg","errmsg":"null"}
总结
同一个用户,在你的多个应用中,openid可能都不相同;但是,unionid一定会相同的。所以,如果你有多个小程序或者微信公众号,需要确定是否为同一个用户的时候,就需要unionid来确定。