微信授权回调时,回调地址中原有参数丢失

近日在做登录微服务的时候,需要做微信授权认证.出现各种坑,(有坑才有成长).
之前一直是只带有一个参数, 没有发现任何问题, 今天在测试项目一些功能时,发现授权后的回调地址中,丢失了原有的参数. 授权页时显示回调地址中参数有2个,当点击确认授权按钮后, 参数剩了一个了.网上没有查到相关问题解决方案,文档上也没有明确记录. 经多方测试,老大指点后.问题终于得到解决.现记录于下.以作错误的经验总结,也给类似问题的同行一个简单的方案或者思路.

先看下服务器抓到的日志信息;
这里写图片描述

上图明显的可以看出, 授权后参数剩下一个了;为什么回调地址经过编码后,还会出现这样的问题呢?刚一开始还以为是微信的问题, 限制传多个参数.后来想想不可能这么low. 后来老大说,你查看下你的编码.然后就统一检查了所有需要编码的地方,都经过编码了,但是还存在这样的问题. 但是,但是有一个地方,就是在拼接的时候, 为了省事,先进行了拼接,后编码. 这时,将统一编码改为分布编码,然后再拼接.OK,问题解决. 看来有时候真是不能偷懒呀!
看下错误的写法:
这里写图片描述

正确写法:
这里写图片描述
这里需要做两次编码处理.引以为戒呀!

已标记关键词 清除标记
回调方法: ``` //扫描二维码授权成功,取到code,回调方法 @RequestMapping(value = "/pcAuth") @ResponseBody public String pcCallback(String code,String state,HttpServletRequest request,HttpServletResponse response) throws Exception { String result = weChatAuthService.getAccessToken(code); JSONObject jsonObject = JSONObject.parseObject(result); //String refresh_token = jsonObject.getString("refresh_token"); String access_token = jsonObject.getString("access_token"); String openId = jsonObject.getString("openId"); System.out.println("state:"+state+"\n code:"+code+"\n openId:"+openId); logger.info("------------授权成功----------------"); JSONObject infoJson = weChatAuthService.getUserInfo(access_token,openId); if(infoJson!=null){ System.out.println("1"); String nickname = infoJson.getString("nickName"); logger.info("-----nickname-----"+nickname); logger.info("-----sessionId-----"+state); infoJson.put("openId", openId); redisTemplate.setValueSerializer(new EntityRedisSerializer()); redisTemplate.opsForValue().set(state, infoJson, 10*60, TimeUnit.SECONDS); System.out.println("getState:"+redisTemplate.opsForValue().get(state+"")); return "登录成功!"; } return "登录失败!"; } ``` 用手机扫码后,手机授权后页面显示“登陆成功!” ![图片说明](https://img-ask.csdn.net/upload/201901/25/1548386252_438567.jpg) 这个回调方法是不是手机端调用的啊? **如果我想手机端登陆后直接回到微信列表页,怎么做??求大佬告知???**