news 2026/4/23 14:14:11

苍穹外卖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/23 11:36:29

1小时验证:工龄计算SaaS产品原型开发

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 构建工龄计算SaaS产品原型&#xff0c;包含&#xff1a;1.多租户账户体系 2.企业自定义工龄规则配置 3.API对接能力 4.付费订阅模块 5.数据看板。使用Next.js全栈框架&#xff0c;…

作者头像 李华
网站建设 2026/4/22 5:11:13

零基础学电子:PMOS导通条件图解入门

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个面向初学者的PMOS导通条件教学演示程序&#xff0c;要求&#xff1a;1) 可视化展示PMOS结构和工作原理 2) 交互式调节Vgs电压观察导通变化 3) 简单测试题和即时反馈 4) 采…

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

DROW.IO:AI如何彻底改变你的编程体验

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个基于DROW.IO的AI辅助开发工具&#xff0c;能够根据用户输入的自然语言描述自动生成代码片段&#xff0c;支持多种编程语言如Python、JavaScript和Java。工具应包括代码自动…

作者头像 李华
网站建设 2026/4/23 9:56:58

零基础教程:用Python制作简易手柄测试器

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个适合初学者的简易手柄测试程序&#xff0c;使用Python和PyGame库。程序只需显示手柄连接状态、实时反馈按键按下情况和摇杆位置。要求代码注释详细&#xff0c;包含基础错…

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

Qwen3-VL-WEBUI与DeepSeek-VL对比:视觉编码能力评测

Qwen3-VL-WEBUI与DeepSeek-VL对比&#xff1a;视觉编码能力评测 1. 背景与选型动机 随着多模态大模型在图像理解、视频分析和跨模态推理等场景的广泛应用&#xff0c;视觉语言模型&#xff08;VLM&#xff09; 的性能差异成为技术选型的关键考量。当前&#xff0c;阿里推出的…

作者头像 李华
网站建设 2026/4/23 9:52:24

没显卡怎么玩Qwen2.5?云端GPU镜像2块钱搞定多语言测试

没显卡怎么玩Qwen2.5&#xff1f;云端GPU镜像2块钱搞定多语言测试 1. 为什么你需要云端GPU玩转Qwen2.5 最近通义千问发布的Qwen2.5-7B模型在开发者圈子里火了&#xff0c;特别是它支持29种语言的强大能力&#xff0c;让很多独立开发者跃跃欲试。但当你兴冲冲地准备在MacBook …

作者头像 李华