换了手机企业微信登不上(企业微信怎么登不上去换了一个手机就登不上去为什么)

一、问题背景

今天接到集团业务人员反馈系统问题,在企业微信扫码登录后无法跳转至系统的主页面,报错截图如下,从图上返回的HTTP状态码:500,可知系统出现了内部应用服务器错误,初步怀疑是接收与解析企业微信的数据出现异常。

换了手机企业微信登不上(企业微信怎么登不上去换了一个手机就登不上去为什么)

企业微信报错信息

二、故障排查

换了手机企业微信登不上(企业微信怎么登不上去换了一个手机就登不上去为什么)

企业微信授权登录流程

由于我司后台使用的是微服务架构(用户-》网关-》授权-》微信消息服务),由于用户鉴权在”授权“服务处理,所以先从"授权"服务的日志排查,发现有返回ERROR信息

2022-05-23 16:36:48.870 [10] [http-nio-8080-exec-11] DEBUG [] [TID:5b3a618684cb4d8d98916b8dbf43c508.1072154.16532950082798953] org.springframework.web.servlet.DispatcherServlet:91 "ERROR" dispatch for GET "/error?appCode=XXX&toPath=/&code=YYYY&state=/", parameters={masked}

并且发现日志中的用户名居然为NULL(如下图所示)

换了手机企业微信登不上(企业微信怎么登不上去换了一个手机就登不上去为什么)

授权服务日志

该用户名是企业微信授权登录请求返回的,由此根据问题跟踪号TID(TID:5b3a618684cb4d8d98916b8dbf43c508.1072154.16532950082798953)在微信消息服务的日志中发现调用企业微信的日志({"DeviceId":"c527a5ac24257ecaff5840500f4c9a82","errcode":0,"errmsg":"ok","OpenId":"oUzxxxxxxxxxxxxxxxxx"}),如下所示,报文仅返回openid,未返回UserId,故给授权服务返回的用户名为NULL,引起系统异常。

2022-05-23 16:36:48.523 [10] [http-nio-8080-exec-10] INFO [45009a2f3d3e429aa35f7e1de6cb0df6] [TID:5b3a618684cb4d8d98916b8dbf43c508.1072154.16532950082798953] com.xxxx.yyyyy.service.message.service.impl.WxServiceImpl:126 =====>获取企业微信用户,请求地址=HTTPS://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=xxxxx&code=yyyyy

2022-05-23 16:36:48.816 [10] [http-nio-8080-exec-10] INFO [45009a2f3d3e429aa35f7e1de6cb0df6] [TID:5b3a618684cb4d8d98916b8dbf43c508.1072154.16532950082798953] com.xxxx.yyyyy.service.message.service.impl.WxServiceImpl:135 <=====获取企业微信用户,响应数据={"DeviceId":"c527a5ac24257ecaff5840500f4c9a82","errcode":0,"errmsg":"ok","OpenId":"oUzxxxxxxxxxxxxxxxxx"}!

三、问题解决

通过排查官方的技术文档(https://developer.work.weixin.qq.com/document/path/91023),获取用户信息,在非企业成员时,会返回OpenId,

换了手机企业微信登不上(企业微信怎么登不上去换了一个手机就登不上去为什么)

企业微信获取访问用户身份接口描述

在官方文档上面使用全文检索OpenId,发现存在如下接口,可将OpenId转化成UserId

请求方式:POST(HTTPS)

请求地址: https://qyapi.weixin.qq.com/cgi-bin/user/convert_to_userid?access_token=ACCESS_TOKEN

请求示例:

{

"openid": "oDjGHs-1yCnGrRovBj2yHij5JAAA"

}

返回信息:

{

"errcode": 0,

"errmsg": "ok",

"userid": "zhangsan"

}

参数 说明

errcode 返回码

errmsg 对返回码的文本描述内容

userid 该openid在企业微信对应的成员userid

使用ApiFox工具进行快捷请求验证测试,发现该接口可满足使用:

换了手机企业微信登不上(企业微信怎么登不上去换了一个手机就登不上去为什么)

OpenId与UserId转换

四、总结

1、故障排查需要沉下心做,了解用户出现的故障,分析应用日志,不放过相关联的任何一个蛛丝马迹,有涉及到外围系统的交易场景,对方的接口要了解仔细,如上所过的企业微"获取访问用户身份"接口,有两种报文返回场景:企业成员和非企业成员返回,由于代码未处理非企业成员的逻辑,引发了如上所述问题。最终,在代码中添加如果非企业成员返回时,再调用一次"OpenId转换UserId"接口,成功获取到用户ID,问题得到解决。

2、经与用户沟通,该最终用户是由于个人微信账号没有关注集团公众号,直接用个人微信扫码登录应用,故企业微信接口按"非企业成员"返回数据,经过实践验证,个人关注后,问题也能得到解决

本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 sumchina520@foxmail.com 举报,一经查实,本站将立刻删除。
如若转载,请注明出处:https://www.sumedu.com/faq/260628.html