微信版本和基础库版本我乱填的。因为我不知道用户的微信版本是什么。我只能把我已知的日志都发出来了。
现象就是大量用户都是获取不到unionId
我就随便拿一条case说明吧
用户侧的header信息如下:
{"host":"我删掉了哈","x-real-ip":"58.44.37.132","x-forwarded-for":"58.44.37.132","x-forwarded-proto":"https","connection":"close","content-length":"228","accept":"*/*","content-type":"application/json","accept-language":"zh-cn","user-agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 12_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.4(0x17000428) NetType/WIFI Language/zh_CN","referer":"https://servicewechat.com/wxba44d03ec6560ad2/17/page-frame.html","accept-encoding":"br, gzip, deflate"} 我们登录服务这边拿到用户的code以后,调用code2Session 即:
https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
这个接口
返回的信息:
{"data":{"session_key":"bdcMt2kQGtIFkUhzw0V0Vg==","openid":"oH3zr4ueuV1x3-iMkuyxR4IlQQiY"},"status":200,"headers":{"connection":"keep-alive","content-type":"text/plain","date":"Thu, 04 Jul 2019 03:43:19 GMT","content-length":"82"},"res":{"status":200,"statusCode":200,"headers":{"connection":"keep-alive","content-type":"text/plain","date":"Thu, 04 Jul 2019 03:43:19 GMT","content-length":"82"},"size":82,"aborted":false,"rt":210,"keepAliveSocket":false,"data":{"session_key":"bdcMt2kQGtIFkUhzw0V0Vg==","openid":"oH3zr4ueuV1x3-iMkuyxR4IlQQiY"},"requestUrls":["https://api.weixin.qq.com/sns/jscode2session?appid=wxba44d03ec6560ad2&secret=我删掉了&js_code=071pJ9UM1yfkU618EiUM1Rr4UM1pJ9Uo&grant_type=authorization_code"],"timing":null,"remoteAddress":"101.226.212.27","remotePort":443,"socketHandledRequests":1,"socketHandledResponses":1}}
其中没有unionId。
我们的小程序是绑定在微信开放平台上的。
并且我自己删除小程序后,重新登录。走同样的case,我是可以拿到我自己的unionId的。
同时我测试过,如果用户拒绝授权用户信息,是不会走这个case的。
请官方帮帮忙看一下 这个问题。 因为现在正在做活动,有大量的用户没有unionId,我们用户体系已经乱掉了。
返回的信息是?无法获取unionId的用户的openid麻烦提供下
首先感谢您的回复。我排查出我的问题是什么了~ 顺便写在这里分享给有需要的人。
这个是微信小程序官方文档对于code2Session的说明
原因是我没有意识到一个点:
如果想通过code2Session去获取unionId,必须保证这个用户:
1. 该用户已经关注了该公众号。
2. 存在同主体的公众号或移动应用,并且该用户已经授权登录过该公众号或移动应用。
而我们小程序的新用户是不满足这两种条件的。
所以需要换成如下的逻辑:
前端调用接口 wx.getUserInfo,后台从解密数据中获取 UnionID。
https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/union-id.html