【银企平台】工行-代发单提交银企付款提示读取流失败,返回500 for URL原创
金蝶云社区-Jasmine_wzw
Jasmine_wzw
8人赞赏了该文章 807次浏览 未经作者许可,禁止转载编辑于2023年03月14日 09:25:08

问题描述:

    工行代发单提交银企失败,银行报文日志显示:读取流失败,Server returned HTTP response code: 500 for URL。详细日志如下:

[2023-03-10 10:42:28,108  ERROR] 支付业务过程中出现异常。

com.kingdee.bos.ebgateway.exception.BankServiceException: 读取流失败

…………

Caused by: java.io.IOException: Server returned HTTP response code: 500 for URL: http://xxx.xxx.xxx.xxx:448/servlet/ICBCCMPAPIReqServlet

at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1441)

at com.kingdee.bos.ebgateway.communication.protocol.impl.HttpClientImpl.getInputStream(HttpClientImpl.java:104)

image.png

    

    查询付款状态又提示:

交易未确认

银行返回:同步付款状态信息=没有符合条件的记录

银企返回:银行报文头返回错误码无法确认付款状态

image.png


分析解答:

        现场反馈,早上付款成功了一笔之后,再去发起付款,还是返回读取流失败。

        对比了付款成功和付款失败的银行报文,发现付款成功的这笔只有一笔付款,付款失败的有多笔付款(批量支付)。

        通过分析日志,看到读取流失败都是在发送请求到工行前置机的时候抛出来的。

        付款成功的这笔日志显示发送的字节比较少;而付款失败的几笔,日志显示发送的字节比较多。

        由此,分析可能是跟前置机的配置有关,获取到工行前置机的error.log日志,发现在付款失败的时间点工行前置机抛出了如下错误:

[2023-03-10 11:46:54,222] - [cn.com.infosec.nc.service.Https] [100008]Exception in HTTPS work thread

java.lang.Exception: data length MUST less than 10240 bytes

at cn.com.infosec.nc.util.http.HttpRequest.receiveRequest(Unknown Source)

at cn.com.infosec.nc.service.HttpsWorker.run(Unknown Source)

at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)


        据现场反馈,之前付款是正常的,近期重装了工行前置机之后才出现的问题;结合上面错误信息,可以推断,前置机上应该有某个配置限制了前置机可以接收的报文的长度。将这个error.log日志发给工行人员,排查是下面这个参数做了限制,如下图所示:

image.png

        

    通过调大这个参数解决了批量支付失败的问题:

image.png

拓展:

        如何取工行前置机的日志,可以看这个帖子:https://vip.kingdee.com/article/381497655941335040?productLineId=8

赞 8