扫码支付超时设置变更记录

变更目标

为扫码支付增加可配置的完整请求超时时间:默认值为 30 秒,只接受 5~120 秒(含边界)的整数。该超时只作用于二维码扫码支付的 HTTP 请求,不改变刷卡、人脸、MQTT 路由或普通 Retrofit 请求的超时行为。

实现摘要

  1. 在 Constants 中集中定义扫码支付超时配置键、默认值 30 秒、最小值 5 秒、最大值 120 秒,并集中定义支付方式常量,消除业务分支中的裸值 paymentType == 2 和 METHOD_QR = 2。
  2. 新增 ScanPaymentTimeoutPolicy,集中负责输入解析、范围校验和异常持久化值归一化;无效值统一回退到 30 秒。
  3. 支付设置页新增扫码支付超时入口和数字输入弹窗。弹窗通过子 FragmentManager 的稳定 tag 恢复,并在视图重建时重新绑定校验与确认回调,避免仅依赖瞬时 listener 的生命周期问题;确认前校验 5~120 秒,合法后才持久化并刷新显示。
  4. 新增独立且缓存的扫码支付 Retrofit 实例。缓存按服务地址和归一化后的超时秒数区分;服务地址更新时同步失效扫码支付缓存。其 OkHttpClient 从共享客户端 newBuilder() 派生,只调整 connect/read/write timeout,保留共享连接池、调度器及其他基础配置;生产代码未调用 callTimeout。
  5. 新增 RxJava timeout,在连接、上传、服务端处理和响应传递的整体链路上施加同一超时上限;TimeoutException 与 SocketTimeoutException 均映射为现有统一超时错误。
  6. PaymentManager 仅在二维码扫码支付时调用新的 HTTP 超时链路;普通 HTTP 支付继续调用原 orderPayment,MQTT 模式下的非扫码支付继续走原 MQTT 路由。新增扫码支付日志只记录 requestId 与 timeoutSeconds,不记录 payCode。

自动化验证

单元测试

Debug 构建

Git 与静态检查

手工 UI / 运行时验收

adb devices 检测到以下 3 个状态为 device 的目标:

本任务没有安装 APK、启动 Activity、写入设置或进行支付请求,因为用户未授权改变设备状态。因此以下项目仍待人工执行,不能宣称通过:设置页显示默认 30 秒、5/120 秒边界保存、4/121/空值拒绝、页面或弹窗重建后的回调与显示、扫码 HTTP 超时提示、刷卡/人脸/MQTT/普通 Retrofit 回归。

已知既存风险与关注项

  1. DishRecognitionActivity.triggerPayment 在本次变更前已存在一条日志,会输出 payCode、cardCode 和 faceUser。通过读取 HEAD 版本确认该行并非本功能新增,因此不作为本次扫码超时功能回归;但它属于敏感信息泄露风险,建议另立任务脱敏或移除。
  2. 手工 UI/真机运行时验收尚未执行,当前结论只覆盖 JVM 单元测试、Debug 构建和静态检查。
  3. Gradle 输出提示存在面向 Gradle 8.0 的 deprecated features 兼容性风险,本次未扩大处理范围。

业务仓当前变更文件

以下为 git status --short 中的完整 AIDishRecognition 业务仓文件清单,共 19 个,均属于扫码支付超时设置功能;未发现额外的已修改或未跟踪业务文件。

已修改

未跟踪

本记录文件

Git 操作

未执行 stage、commit、push、branch、merge、rebase、reset 或 clean。