Connect to report.mch.weixin.qq.com:80 [report.mch.weixin.qq.com/0.0.0.1] failed: 无效的参数 (connect fai

原文链接: (wxpay java sdk.run:166 - report fail. reason: Connect to report.mch.weixin.qq.com:80 [report.mch.weixin.qq.com/0.0.0.1] failed: 无效的参数 (connect failed)

问题

今天在巡查后端日志的时候发现,微信支付日志里有许多失败记录

(wxpay java sdk.run:166 - report fail. reason: Connect to report.mch.weixin.qq.com:80 [report.mch.weixin.qq.com/0.0.0.1] failed: 无效的参数 (connect failed)

原因

网上简单搜了一下,排名靠前的回答是说什么跟微信不支持苹果端小程序支付有关,但看错误提示,感觉跟这个应该关系不大,后来经过排查,发现是微信支付官方SDK的问题。
以下是微信SDK中WXPayReport.java文件中的代码截图:

微信支付SDK截图

看了看微信支付接口,发现微信支付接口中有一个“测速上报”的功能,意思就是把商户的响应时间啥的报告给微信,帮助它优化网络部署之类的。
但是注意,上图中的url地址是不可访问的😓。。。(可以测试一下上面的地址,是找不到IP的)
微信支付接口文档中的上报地址是下面这样的:

在这里插入图片描述

解决方案

那么怎么解决呢?让我改它代码加上上报功能,我是懒得改,还是看看怎么关掉它吧。

大概看了一下源码,发现是有一个开关的,在 WXPayConfig.java 有一个shouldAutoReport()方法:

在这里插入图片描述

我们在实现子类的时候,可以覆盖这个方法,然后返回 false就可以关闭自动上报了。

继续跟踪了一下代码,发现SDK中用了一个LinkdBlockingQueue来作为报告发送队列,即使关掉自动上报,代码还是会把报告加入队列中,白白浪费内存。唉,直接改SDK代码吧。。。

修改WXPayReport.java文件,添加开关控制就行了:

public void report(String uuid, long elapsedTimeMillis,
                       String firstDomain, boolean primaryDomain, int firstConnectTimeoutMillis, int firstReadTimeoutMillis,
                       boolean firstHasDnsError, boolean firstHasConnectTimeout, boolean firstHasReadTimeout) {
        if (config.shouldAutoReport()) { // 这里添加控制
            long currentTimestamp = WXPayUtil.getCurrentTimestamp();
            ReportInfo reportInfo = new ReportInfo(uuid, currentTimestamp, elapsedTimeMillis,
                    firstDomain, primaryDomain, firstConnectTimeoutMillis, firstReadTimeoutMillis,
                    firstHasDnsError, firstHasConnectTimeout, firstHasReadTimeout);
            String data = reportInfo.toLineString(config.getKey());
            WXPayUtil.getLogger().info("report {}", data);
            if (data != null) {
                reportMsgQueue.offer(data);
            }
        }
    }

最后

最后还是希望官方的SDK能够改一下吧,很明显的错误,做大厂要有点大厂的样子嘛😅。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
引用\[1\]: 微信支付API提供了多个接口,其中包括统一下单、查询订单、关闭订单、申请退款、查询退款、下载对账单、下载资金账单、交付结果通知、交易保障、退款结果通知和拉取订单评价数据等接口。这些接口有些需要使用证书,有些则不需要使用证书。\[1\] 引用\[2\]: 有时候在使用微信支付接口时,可能会遇到无法请求接口的问题。其中一个可能的原因是DNS解析错误,可以通过在服务器的hosts文件中添加微信支付接口的IP地址来解决这个问题。\[2\] 引用\[3\]: 另外,有时候在生成微信支付二维码时也可能遇到问题。最近微信支付进行了升级,导致原来的请求位置支付的二维码地址不能用了,所以只能在服务器本地生成支付二维码。在调试过程中,可能会遇到打印出的$responseXml为空的情况,这可能是请求接口时出现了问题。\[3\] 综上所述,如果你遇到了无法请求"https://api.mch.weixin.qq.com/pay/unifiedorder"接口的问题,可能是由于DNS解析错误或者接口升级导致的。你可以尝试在服务器的hosts文件中添加微信支付接口的IP地址来解决DNS解析错误的问题。另外,你还可以检查请求接口时的代码是否正确,确保请求参数正确传递。如果问题仍然存在,建议查看微信支付的官方文档或联系微信支付的技术支持获取进一步的帮助。 #### 引用[.reference_title] - *1* [微信支付--公众号支付及退款,采坑之旅](https://blog.csdn.net/qq_36994538/article/details/100079697)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [PHP微信支付 curl请求https://api.mch.weixin.qq.com/pay/unifiedorder 返回空的解决方案](https://blog.csdn.net/amtz_2000/article/details/84139019)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值