news 2026/1/22 11:51:52

苍穹外卖day6微信登录报错500且openid=null(已解决)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
苍穹外卖day6微信登录报错500且openid=null(已解决)

微信登录功能开发过程中的Bug解决日志

在进行微信用户登录这一功能的开发时,我被一个bug卡了好久:使用Postman向微信接口服务发送GET请求获取openid是成功的,但在Java程序中却失败,报错:

{"errcode":40002,"errmsg":"invalid grant_type, rid: 69613ee1-1363e562-5faeede8"}

经过仔细排查和Gemini的协助,发现UserServiceImpl中新用户自动完成注册部分的代码存在bug。
原代码如下:

@Service@Slf4jpublicclassUserServiceImplimplementsUserService{// 微信接口服务地址publicstaticfinalStringWX_LOGIN="https://api.weixin.qq.com/sns/jscode2session";@AutowiredprivateWeChatPropertiesweChatProperties;@AutowiredprivateUserMapperuserMapper;// 微信用户登录@OverridepublicUserwxLogin(UserLoginDTOuserLoginDTO){// 1.调用微信接口服务,获取当前微信用户的openidMap<String,String>map=newHashMap<>();map.put("appid",weChatProperties.getAppid());map.put("secret",weChatProperties.getSecret());map.put("js_code",userLoginDTO.getCode());map.put("grant_type","authorization_code");Stringjson=HttpClientUtil.doGet(WX_LOGIN,map);JSONObjectjsonObject=JSON.parseObject(json);Stringopenid=jsonObject.getString("openid");// 2.判断openid是否为空,如果为空,说明登录失败,抛出业务异常if(openid==null){thrownewLoginFailedException(MessageConstant.LOGIN_FAILED);}// 3.根据openid去user表中查询是否存在对应用户,从而判断当前用户是否为苍穹外卖的新用户LambdaQueryWrapper<User>lqw=newLambdaQueryWrapper<>();lqw.eq(User::getOpenid,openid);Useruser=userMapper.selectOne(lqw);if(user==null){// 4.如果是新用户,自动完成注册user.setOpenid(openid);user.setCreateTime(LocalDateTime.now());userMapper.save(user);}returnuser;}}

可以发现,在if(user==null){…}内部,我忘记先new一个User出来,导致user仍为数据库查出的结果也就是null,这时候调用setOpenid必然失败,因为不能给null对象赋值!

修改如下:

if(user==null){// 4.如果是新用户,自动完成注册//Caution: 必须先new一个User出来,否则user仍为null,调用setter会报错!user=newUser();user.setOpenid(openid);user.setCreateTime(LocalDateTime.now());userMapper.save(user);}

修改后就返回200 OK了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/22 0:16:32

AI智能实体侦测服务测试用例设计:覆盖率与边界条件验证方案

AI智能实体侦测服务测试用例设计&#xff1a;覆盖率与边界条件验证方案 1. 引言&#xff1a;AI 智能实体侦测服务的测试挑战 随着自然语言处理技术在信息抽取领域的广泛应用&#xff0c;命名实体识别&#xff08;NER&#xff09; 已成为构建智能内容分析系统的核心能力之一。…

作者头像 李华
网站建设 2026/1/13 15:11:51

5分钟搭建VISUAL STUDIO COMMUNITY 2022原型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 快速创建一个VISUAL STUDIO COMMUNITY 2022概念验证原型&#xff0c;展示核心功能和用户体验。点击项目生成按钮&#xff0c;等待项目生成完整后预览效果 最近在尝试用InsCode(快马…

作者头像 李华
网站建设 2026/1/15 6:57:24

RAII图解指南:从零开始的资源管理课

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建交互式学习项目&#xff1a;1. 可视化资源生命周期动画 2. 分步练习(基础→文件→网络→多线程) 3. 错误代码找茬游戏 4. 实时内存状态监视器。要求使用HTMLWebAssembly实现浏…

作者头像 李华
网站建设 2026/1/15 4:21:59

电商系统中LinkedHashMap的5个实战案例

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 构建一个电商系统演示项目&#xff0c;重点展示LinkedHashMap在以下场景的应用&#xff1a;1) 最近浏览商品记录(保留最后20条)&#xff1b;2) 购物车商品顺序保持&#xff1b;3) …

作者头像 李华
网站建设 2026/1/15 7:42:18

网络小白必看:5分钟理解‘NO ROUTE TO HOST‘及简单解决方法

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个面向初学者的图形化网络诊断工具&#xff0c;功能包括&#xff1a;1) 一键网络连通性测试 2) 可视化路由检查 3) 简单问题自动修复向导 4) 常见问题解答库。要求界面友好&…

作者头像 李华
网站建设 2026/1/17 13:43:54

LangChain中文指南:10倍提升开发效率的技巧

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个LangChain效率工具包&#xff1a;1. 自动化文档处理流水线 2. 常用链(Chain)的预制模板 3. 性能监控装饰器 4. 调试日志增强工具 5. 一键测试套件。要求每个工具都有详细使…

作者头像 李华