关于微信带参二维码回调参数改变或返回为null的说明
•发布于   •作者 卢大庆  •316 次浏览  •来自 分享

    花了一天时间处理这个问题,我第一次将参数直接加到微信参数中去

String url=setting.getSiteUrl()+"/login/wxloginCallBack.jhtml?uuid="+uuid+"&currentUrl="+currentUrl;
currentUrl是我加的参数,参数获取后直接加到后面

微信登录后回调我拿到的参数是经过decode解密后的数据,如果原来的参数包含中文,那么在后台拿到的是经过

encode加密后的数据(仅仅中文改变)

java.net.URLEncoder.encode(currentUrl, "utf-8");//加密
java.net.URLDecoder.decode(currentUrl, "utf-8");//解密

这样回调方法里面中文参数将不再是当初刚拿到时的参数,会被直接解密成正常的中文文字,如果直接返回该链接那么中文不会被浏览器识别,必须原样返回。

那么这该怎么办,怎么才会保证数据不会被微信拦截处理,我首先使用了base64加密方式,将整个参数进行加密处理,然后回调后再进行解密,这样就可以把参数原样返回,可是在后面的测试中,我发现进过加密后的数据在微信登录后回调到方法里面,接收这个参数的时候,参数变为null,那么可以确定的是,微信把我的加密数据拦截了,不让传输,就这样我在网上怎么找也找不到一个合适的方式。无意中想到,既然他是自动帮我用decode解密的(utf-8的方式),那么我为什么不把原来的数据进行encode加密,使用其他方式加密,比如使用iso-8859-1编码格式进行encode加密,我担心他还能给我解密,我就在这个参数上有进行二次加密,第一次使用iso-8859-1的编码格式进行加密,第二次加密使用utf-8的编码格式进行加密,它既然会自动解密(utf-8的方式)那么就让他解,解了一层那我拿到数据后你总该动不了了吧,拿到数据后再使用iso-8859-1的编码格式进行decode解密,然后数据就还原了,返回该链接,前端识别后进行正常跳转,就这样。

1 回复
Jencks

加油

回到顶部

©2017 Powered by 三十三行伪代码
皖ICP备17005175号-3