简要描述
也是老用户了,用了这个框架两年多了,也是才发现微信支付回调中关于微信来源验签,有个逻辑问题,分支是在release版本下的
模块版本情况
WxJava 模块名: weixin-java-pay
WxJava 版本号:3.9.0
详细描述
支付回调的验签以及 xml转换入口使用了 BaseWxPayServiceImpl 这个类的 195行 parseOrderNotifyResult,发现 210行
WxPayOrderNotifyResult 这个类 checkResult 这个方法 320这行,我看逻辑处理是 当return_code等于success 并且sign 不为空的情况下,才判断是伪造的通知,那么假设伪造的通知 sign为空、并且return_code不传,这个逻辑就返回false不走了。
会执行 BaseWxPayResult 332 行 checkResult这个方法,这时候由于 sign是空的, checkSuccess 又是false 等于什么逻辑都没走。 建议及时改造,虽然交易单号,都是从后台生成传递给微信支付供应商那边,但还是有概率被穷举出来 或者 内部泄露之类的,通知成功支付,会对企业造成损失的
本地测试的时候,我只传了这两个参数,没有进入验签的逻辑,尝试的版本 是在3.5.0下,也看了该出代码最新的release版本,并没有做出改动。
建议把parseOrderNotifyResult这个方法 只做xml的转换,把验签逻辑单独出来,可以方便用户在生产 和 测试环境上的配置