扫码成功后,支付接口原先复用全局 HTTP 客户端的 5 秒读取超时。在网络响应较慢时,扫码支付可能过早进入“请求超时”。本次增加独立设置项,使管理员可配置扫码支付等待支付接口返回的 HTTP 读取超时。
配置默认值为 30 秒,允许输入 1~100 的整数值。
本次覆盖以下 5 个当前可达支付页面:
MainActivityQuotaActivityQuotaNoKeyboardActivityFreeActivityFreeNoKeyboardActivity明确不修改:
NewQuotaActivityPaymentManagerQrcodePaymentTimeoutConfig,集中维护默认 30 秒、1~100 秒范围、配置读写和异常值回退。QrcodePaymentHttpClientFactory,基于全局 OkHttp 客户端创建扫码支付专用客户端。readTimeout;connectTimeout 和 writeTimeout 继续沿用全局客户端的 5 秒设置。RetrofitClient 新增一次性 API 创建入口,不写入全局 Retrofit 缓存,确保下一笔扫码支付读取最新配置。RetrofitRequest.orderPayment 保留原三参数方法,并增加显式扫码超时选择参数,以兼容排除范围内的旧调用。5 个覆盖页面在调用支付接口时根据支付类型显式判断是否启用扫码支付专用读取超时。刷卡、人脸及其他非扫码请求继续使用原有全局客户端。
30秒。QrcodePaymentTimeoutConfigTest,覆盖默认值、边界值和异常值回退。QrcodePaymentHttpClientFactoryTest,验证仅修改读取超时,并保持基础客户端不变。Constants.java、QrcodePaymentTimeoutConfig.java、QrcodePaymentHttpClientFactory.java、RetrofitClient.java、RetrofitRequest.java。FragmentPayment.java、fragment_payment_layout.xml、InputQrcodePaymentTimeoutPop.java、input_qrcode_payment_timeout_pop_layout.xml、strings.xml。MainActivity.java、QuotaActivity.java、QuotaNoKeyboardActivity.java、FreeActivity.java、FreeNoKeyboardActivity.java。QrcodePaymentTimeoutConfigTest.java、QrcodePaymentHttpClientFactoryTest.java。以下命令均使用 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
NewQuotaActivity 和 PaymentManager 无代码差异。构建期间仍会输出项目既有的 Build Tools 版本、重复权限、过时 API 和第三方 JAR class 版本警告,本次未修改这些既有问题。
以下项目需要在消费机设备和可控制延迟的支付接口环境中验证:
30秒。当前未连接目标设备,也未接入延迟模拟支付服务,因此上述设备端验收尚未执行。
代码已实现“扫码成功后等待支付接口返回”的可配置 HTTP 读取超时:默认 30 秒,设置范围 1~100 秒。修改仅对 5 个当前可达页面的扫码支付生效,未改动 NewQuotaActivity、PaymentManager 及其他超时机制。自动化测试和编译已通过,剩余工作为设备端人工验收。