扫码支付 HTTP 超时时间配置变更记录

背景和目标

扫码成功后,支付接口原先复用全局 HTTP 客户端的 5 秒读取超时。在网络响应较慢时,扫码支付可能过早进入“请求超时”。本次增加独立设置项,使管理员可配置扫码支付等待支付接口返回的 HTTP 读取超时。

配置默认值为 30 秒,允许输入 1~100 的整数值。

实施范围

本次覆盖以下 5 个当前可达支付页面:

明确不修改:

实际修改

配置和网络层

支付页面

5 个覆盖页面在调用支付接口时根据支付类型显式判断是否启用扫码支付专用读取超时。刷卡、人脸及其他非扫码请求继续使用原有全局客户端。

设置页面

测试

涉及文件

自动验证结果

以下命令均使用 JDK 8 执行,因为项目的 Gradle 6.7.1 / Android Gradle Plugin 4.2.1 与当前默认 JDK 17 不兼容:

JAVA_HOME=$(/usr/libexec/java_home -v 1.8) bash gradlew :app:testDebugUnitTest --no-daemon
JAVA_HOME=$(/usr/libexec/java_home -v 1.8) bash gradlew :app:compileDebugJavaWithJavac --no-daemon
git diff --check

构建期间仍会输出项目既有的 Build Tools 版本、重复权限、过时 API 和第三方 JAR class 版本警告,本次未修改这些既有问题。

人工验收状态

以下项目需要在消费机设备和可控制延迟的支付接口环境中验证:

  1. 首次进入支付设置显示 30秒。
  2. 输入 1 和 100 可保存,退出重进后仍保留。
  3. 空值、0、101 不保存并显示正确提示。
  4. 扫码支付接口响应超过 5 秒但小于配置值时不提前超时。
  5. 响应超过配置值时继续显示现有“请求超时”。
  6. 5 个覆盖页面的扫码支付均使用新配置。
  7. 刷卡、人脸、其他 HTTP 请求、扫码弹框和 MQTT 超时行为保持不变。

当前未连接目标设备,也未接入延迟模拟支付服务,因此上述设备端验收尚未执行。

结论

代码已实现“扫码成功后等待支付接口返回”的可配置 HTTP 读取超时:默认 30 秒,设置范围 1~100 秒。修改仅对 5 个当前可达页面的扫码支付生效,未改动 NewQuotaActivity、PaymentManager 及其他超时机制。自动化测试和编译已通过,剩余工作为设备端人工验收。