- 需求的场景描述(希望解决的问题)
我们暂时只要关注前两个字段即可,openid就是前文一直提到的微信用户id,可以用这个id来区分不同的微信用户。session_key则是微信服务器给开发者服务器颁发的身份凭证,开发者可以用session_key请求微信服务器其他接口来获取一些其他信息,由此可以看到,session_key不应该泄露或者下发到小程序前端。
对于有多个小程序业务,需要相同的账号体系的公司来说,openId对于不同的appId不一样,一般都需要获取到unionId保证用户的ID一致,但是unionId的返回需要满足一些条件
调用接口wx.getUserInfo,从解密数据中获取UnionID。注意本接口需要用户授权,请开发者妥善处理用户拒绝授权后的情况。
如果开发者帐号下存在同主体的公众号,并且该用户已经关注了该公众号。开发者可以直接通过wx.login获取到该用户UnionID,无须用户再次授权。
如果开发者帐号下存在同主体的公众号或移动应用,并且该用户已经授权登录过该公众号或移动应用。开发者也可以直接通过wx.login获取到该用户UnionID,无须用户再次授权。
对于开发者来说,根本无法获取用户是否已经授权过公众号或移动应用,在wx.login中并不能获取到所有用户的UnionId,所以后两条只是锦上添花,根本不能覆盖所有的用户,不管怎样都需要第一条来实现登录获取到unionId。
- 希望提供的能力
目前出现了需要用户主动触发才可以调用wx.getUserInfo,目的是为了把这两者区分开来,但是你因为上面三条中的后两条不能覆盖全部用户,所以还是需要把这两者结合才可以获取到unionId
调用wx.getUserInfo,从解密数据中获取UnionId,说明只要授权后业务的后端就可以获取到unionId,那为什么不能在wx.getUserInfo被用户同意授权后,调用wx.login就直接返回给业务后端unionId呢?
这样才是真正的解耦了,而且都是后端之间的调用,也不存在把隐私数据下发在前端的问题,为什么不能返回unionId
另外测试发现,一个刚注册的微信账号,
1.关注同一开发者下的公众号,小程序马上可以获取到unionId
2.只在web页微信授权登录之后,满足所有条件的情况下依然获取不到unionId【请关注】
@官方@官方,求解
另外:
主要的疑问就在于:wx.getUserInfo的授权弹窗既然包含有这些encryptedData,里面有unionId,为啥不能和条件2,3一样同等享有同意授权后返回unionId的权利?
如果真的想要按照小程序小故事:登录能力优化里实现最佳实现,请考虑一下大厂的需要返回unionId的需求。https://developers.weixin.qq.com/blogdetail?action=get_post_info&lang=zh_CN&token=&docid=000e2aac1ac838e29aa6c4eaf56409
万分感谢