你懂那种痛苦吗,就是本地,测试,预发环境都是好好的,然后线上突然报这个问题(然后领导问我:之前没有做测试吗!!! 我:??? 内心OS:您老是不是爱吃虾~都在线上跑这么久了,然后才突然出现的~)
咳~言归正传~线上支付的人流量比较大,退款虽然是很小一部分,但是一天来个几笔让人也是很烦的~看报错的字面意思是在报协议错误?还是一脸懵,不支持协议是个什么鬼~难不成是微信那边请求的接口出现什么变化了?但是不可能啊,要是这种接口微信那边随便的变动,那网上还不炸开了锅,于是遵从不懂就问度娘的优良传统,我到网上收了一下,这个问题,然后就发现这种中二的问题还不是我一个人有遇见,然后网上提供的方法各式各样的都有,这边就不一一解释了,主要是提供一下本大小姐的 解决艰难路径~(快谢恩~)
第一种:网上说请求用了不支持的协议,需要修改请求路径定义的协议
我用的请求地址的jar是 IJPay:1.2.2,然后请求地址一路点下去还真找到,网友提到的这个协议TLSv1,然后网友建议 把这个指定的协议设置为null,然后让他使用默认的协议,这个问题就解决了,看着好像很有道理的样子~但是!!!他呀的这个是第三方的jar包,我他丫要是想改就得重头复写这个方法~中间不知道还会有多少坑~~这个方案暂时搁浅,懒人的心理看看还没有其他的简单一点解决方案~
第二种 :修改服务器这个路径jdk/jre/lib/security/java.security的配置文件
这个意思就是说修改jdk的配置文件,允许SSLv3如果还有禁止的协议还有TLSv1,TLSv.1 等协议可以一起解封,都删掉就可以了(disable嘛~就是不允许,删除就是允许嘛)这儿还有一个问题,就是由于测试环境和预发环境都没有报这个错误,没法测试就只能去线上的服务器玩了,然后这里有个巨大无比的坑,我们微信退款的证书他妹的过期了,上线后发现还是报错测试就以为改的不对,他就还原了,我~然后后续想象的到,我开始尝试各种方法,过程之惨烈就不说了,后来还是我自己去看的日志才发现是在报证书失效~~这儿还是说明一下
微信退款的时候证书失效解决方案(看另外一篇文章吧~https://www.cnblogs.com/zxw914/p/15544503.html)
证书解决了,然后再用上面的第二种方案退款就正常了,看着手机正常的退款,心情不知道多复杂,丫丫的,这儿说明一下网上有教人重新安装JDK的,如果不是到万不得已的地步,千万不要轻易尝试,修改一下JDK的配置文件其实就好了,不然随便动服务器的JDK会出大问题的(不要问我是怎么知道的,这都是血淋淋的教训~不说了)