收藏
回答

code2Session 获取不到unionid 紧急求助

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 Bug code2Session 客户端 1.0.0 1.0.0

微信版本和基础库版本我乱填的。因为我不知道用户的微信版本是什么。我只能把我已知的日志都发出来了。


现象就是大量用户都是获取不到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,我们用户体系已经乱掉了。


最后一次编辑于  2019-07-04
回答关注问题邀请回答
收藏

1 个回答

  • 是小白啊
    是小白啊
    2019-07-04

    返回的信息是?无法获取unionId的用户的openid麻烦提供下

    2019-07-04
    有用
    回复 2
    • 98%
      98%
      2019-07-04

      首先感谢您的回复。我排查出我的问题是什么了~ 顺便写在这里分享给有需要的人。

      这个是微信小程序官方文档对于code2Session的说明

      UnionID获取途径

      绑定了开发者帐号的小程序,可以通过以下途径获取 UnionID。

      1. 调用接口 wx.getUserInfo,从解密数据中获取 UnionID。注意本接口需要用户授权,请开发者妥善处理用户拒绝授权后的情况。


      2. 🤩如果开发者帐号下存在同主体的公众号,并且该用户已经关注了该公众号。开发者可以直接通过 wx.login + code2Session 获取到该用户 UnionID,无须用户再次授权。



      3. 🤩如果开发者帐号下存在同主体的公众号或移动应用,并且该用户已经授权登录过该公众号或移动应用。开发者也可以直接通过 wx.login + code2Session 获取到该用户 UnionID ,无须用户再次授权。



      原因是我没有意识到一个点:

      如果想通过code2Session去获取unionId,必须保证这个用户:


      1. 
      该用户已经关注了该公众号。
      2. 
      存在同主体的公众号或移动应用,并且该用户已经授权登录过该公众号或移动应用。



      而我们小程序的新用户是不满足这两种条件的。


      所以需要换成如下的逻辑:

      前端调用接口 wx.getUserInfo,后台从解密数据中获取 UnionID



      2019-07-04
      回复
    • 98%
      98%
      2019-07-04

      https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/union-id.html

      2019-07-04
      回复
登录 后发表内容