news 2026/4/17 8:58:51

苍穹外卖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/4/17 14:09:03

10分钟构建NEXT.JS漏洞演示原型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 快速生成一个NEXT.JS漏洞演示原型&#xff0c;包含&#xff1a;1) 可配置的漏洞开关&#xff08;开启/关闭防护&#xff09;&#xff1b;2) 实时攻击演示界面&#xff1b;3) 漏洞影…

作者头像 李华
网站建设 2026/4/18 2:23:47

企业级Python开发中的wheel构建问题实战

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个企业级Python包构建监控工具&#xff0c;功能包括&#xff1a;1. 监控CI/CD流水线中的wheel构建过程&#xff1b;2. 自动捕获和分析Getting requirements to build wheel错…

作者头像 李华
网站建设 2026/4/17 19:15:26

1小时验证创意:用SOYBEAN ADMIN快速构建产品原型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 快速开发一个SaaS产品管理平台原型&#xff0c;基于SOYBEAN ADMIN实现&#xff1a;1.多租户支持 2.订阅计费系统 3.使用量统计 4.客户支持工单 5.产品功能开关控制。要求1小时内完…

作者头像 李华
网站建设 2026/4/18 7:53:55

Qwen2.5省钱攻略:按需付费比买显卡省90%,1小时起租

Qwen2.5省钱攻略&#xff1a;按需付费比买显卡省90%&#xff0c;1小时起租 1. 为什么自由职业者需要Qwen2.5按需付费 作为一名自由职业者&#xff0c;你可能经常遇到这样的困境&#xff1a;接到AI项目需求时&#xff0c;发现自己的设备性能跟不上&#xff0c;而购买高端显卡&…

作者头像 李华
网站建设 2026/4/11 23:45:35

Qwen3-VL压力测试:高并发场景优化

Qwen3-VL压力测试&#xff1a;高并发场景优化 1. 引言 随着多模态大模型在实际业务中的广泛应用&#xff0c;视觉-语言模型&#xff08;Vision-Language Model, VLM&#xff09;的性能边界不断被挑战。阿里云最新推出的 Qwen3-VL 系列模型&#xff0c;作为 Qwen 系列中迄今最…

作者头像 李华
网站建设 2026/4/18 6:19:04

零基础入门:30分钟搭建你的第一个直播网站

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个极简的个人直播网站教程&#xff0c;要求&#xff1a;1) 使用OBS推流 2) 网页端显示直播画面 3) 添加关注按钮 4) 手机端适配 5) 部署到inscode的托管服务。所有步骤用截图…

作者头像 李华