Android 消费流程已接入新开普一卡通 UploadBusinessRec。正金额扣款完整成功后,程序按实际钱包交易拆分记录、先写入独立本地队列,再由现有后台同步任务上传;原业务系统接口 C 保持不变。
AppID 由一卡通设置读取,未配置时默认 48。AccCode,未配置时默认 219。TermID 已作为一卡通设置中的独立可输入项,未配置时默认 1012;第二台设备需配置为 1013。48。CompType、FindOrder 属于 Windows Change 读写卡配置,本次不作为 UploadBusinessRec 参数发送。ProxyWebService.asmx?WSDL 后,上传请求改为严格按照 59 字段 PROXY_BusinessDTO 的名称、类型和 sequence 顺序输出。BusinessType=1、MealID=1;原 Android 临时值 BusinessType=0 会被服务端以 retResult=-13、非法的业务类型 拒绝,现已修正。CardSN 传整数持卡序号;成功报文中的 TradeCardType 同样取持卡序号。页面输入的 CPU 卡类别 8 没有出现在该次成功 DTO 中。ASN;成功样本 AA030000026D60992AB9 对应 2668795341488。可选字段 Cardsnr、CardMac、OppzwDate、KeyB 按成功报文发送 xsi:nil。ASN 的最低半字节处理由这一张卡的成功报文反推,已经固化回归测试,但仍需使用第二张不同卡应用序列号复核,避免把单样本规律误当成厂商通用规则。TAC;负的 Java long 位模式会先转换到 0~4294967295。OPDT 保持实际消费时间;CollectDT、ResetDT、CreateDT 使用本次发起上传的时间;Description 固定为厂商成功样本中的协议文本“上机支出”。RetMessage 保留 Windows 请求中的 79 个空格占位;顶层 retMessage 继续发送 xsi:nil,retResult 发送 0。rtn;顶层继续保留 WSDL 定义的 retMessage、retResult 占位参数。UploadBusinessRecResult 布尔值为主结果,并读取 retResult。false 属于业务字段或配置拒绝,保留 retMessage 且禁止后台自动重试;不再使用旧的 rtn > 100 规则。retMessage 优先作为结果详情,兼容 msg。consumption_records.db 从版本 2 升级为版本 3,新增 onecard_upload_records。order_no + segment_index 唯一约束,避免同一订单同一钱包分段重复入队。PENDING 或明确 FAILED 且 result_uncertain=0 的记录重新置为 PENDING,清理旧错误和租约并立即调度;历史尝试次数保留。RESULT_UNKNOWN 或 result_uncertain=1 继续禁止手动和自动盲目重传,必须先核对服务端是否已入账。rowid 和一卡通表 id 高水位,点击后新进入列表的订单不属于本轮。:app:testDebugUnitTest --rerun-tasks:185 个测试通过,0 failure、0 error、0 skipped。:app:assembleDebug:构建成功。git diff --check:通过。app/build/outputs/apk/debug/app-debug.apk,约 64 MB。ca4c30c837fb22eb7bad168692cf7cb30cfab623f0c3ece6aedb74aba69a6e16。CAFA20260912134143E3DD2B 的旧 16 字段请求返回 XML 第 454 列格式错误;改为现场 WSDL DTO 后,服务端已完成反序列化并明确返回 retResult=-13、非法的业务类型。UploadBusinessRecResult=true、retResult=100、retMessage=上传记录成功。Android DTO 适配层已按该样本修正,并增加真实样本回归测试。CAFA20260912134143E3DD2B 执行“上传未完成项”,只重传一卡通流水,没有再次扣卡;服务端返回 UploadBusinessRecResult=true、retResult=100、retMessage=上传记录成功,耗时 372 ms。FAILED 更新为 UPLOADED,尝试次数由 2 增至 3;业务通道仍为 UPLOADED。页面随后显示 0/0 页 · 共 0 单,该订单已自动移出待上传列表。1012、1013 两台终端各完成至少一笔主钱包上传;有补贴卡时再验证跨钱包两条记录。connectedDebugAndroidTest 在测试结束阶段执行了目标应用卸载,导致应用私有数据库与 MMKV 配置被清空;后续禁止在生产设备上再次运行该任务,真机验证改为手动安装 APK 和定向执行测试包。CAFA20260912134143E3DD2B 的扣款流水、一卡通子任务及上传状态已完整恢复并完成成功补传。http://10.19.10.200/、设备编号 001、消费模式,以及一卡通 URL、AppID=48、TermID=1012、AccCode=219 和消费流水上传开关;定向恢复测试执行 OK (1 test) 后只卸载测试包,主应用仍在。PRAGMA integrity_check 返回 ok;主表 5 条、一卡通子表 1 条,子表终态为 UPLOADED 且无失败信息。92071FC9;账号 29373、卡号 1705827、持卡序号 2、卡类型 8、卡状态 241、卡应用序列号 AA030000026D60992AB9。60964、现金余额 381、现金消费计数 76、补贴余额 0、补贴消费计数 0。1 分、钱包 0、消费时间 2026-09-12 15:23:30,只点击一次“消费”;程序提示“消费成功”。166715196755、PSAM 卡脱机交易序号 40、交易验证码/TAC 1535333204。60964、现金余额 380、现金消费计数 77、补贴余额 0、补贴消费计数 0;余额减少 1 分且计数增加 1,和本次单次消费一致。http://10.128.1.19/WebService/Newcapec.eCard.ProxyWebService.asmx 成功。Desktop\\Change 中的 Change.set 为 AppID=48、AccCode=219、CompType=0、FindOrder=12;与当前 Android 约定一致,初次上传返回 -1 不能归因于这四项配置缺失。1012、账号 29373、卡号 1705827、持卡序号 2、钱包 0、卡类型 8、总额 60964、余额 380、消费额 1、消费计数 77、管理费 0,并使用上述 PSAM/TAC、卡应用序列号和消费时间。-1。该次操作没有再次扣款。trace.txt 经核对是 Bus Hound 的 USB 抓取文件,不是 WebService 日志。当前推断为测试程序绕过系统代理,或在 HTTP 发送前已返回 -1,尚不能据此确认 SOAP 正确字段。9999 反向代理到 10.128.1.19:80 并启用请求断点;测试程序地址第一次修改时误将新地址追加在旧地址之后,因此此前的“连接成功”不属于代理链路验证。随后断开旧 WebService、清空地址栏,但测试程序退出,未形成可信的代理请求样本。-1,Charles 中仍无对应 POST;该次没有再次消费或扣卡。由于测试程序当时仍使用旧连接对象或处于未初始化状态,该结果不能作为服务端再次拒绝的证据。-2。同一时间从开发机直接向原始地址发送只读 GetCustomerCount SOAP 请求,使用 AppID=48,服务器正常返回 26200。因此这次 -2 不是 Charles 或一卡通服务器不可用造成的,而是 Windows 测试程序本地连接状态未初始化。127.0.0.1:9999,不会影响测试程序恢复后的原始 10.128.1.19 地址。26200。随后重新填写最早一笔真实消费:TermID 1012、账号 29373、卡号 1705827、持卡序号 2、钱包 0、卡类型 8、总额 60964、余额 380、消费额 1、消费计数 77、管理费 0、PSAM 卡号 166715196755、PSAM 脱机交易序号 40、TAC 1535333204、卡应用序列号 AA030000026D60992AB9、消费时间 2026-09-12 15:23:30。2026-09-12 16:46 点击一次“消费记录上传”,程序仍返回失败 -1;本次没有再次消费或扣卡。01012 修正为 1012,将卡应用序列号补全为 AA030000026D60992AB9,并将消费时间修正为标准格式 2026-09-12 15:23:30;其余字段保持上述真实流水值不变。2026-09-12 16:58 只点击一次“消费记录上传”,等待约 20 秒后测试程序提示“上报消费记录成功!”,显示 Web服务返回值:100 和“上报记录成功”。本次仅上传历史流水,没有再次消费或扣卡。http://10.128.1.19/WebService/Newcapec.eCard.ProxyWebService.asmx、AppID 48、TermID 1012、账号 29373、卡号 1705827、持卡序号 2、钱包 0、卡类型 8、总额 60964、余额 380、消费额 1、消费计数 77、管理费 0、PSAM 卡号 166715196755、PSAM 脱机交易序号 40、TAC 1535333204、卡应用序列号 AA030000026D60992AB9、消费时间 2026-09-12 15:23:30。9999 反向代理到 10.128.1.19:80,测试程序临时改连 http://127.0.0.1:9999/WebService/Newcapec.eCard.ProxyWebService.asmx。2026-09-12 17:16:59 点击只读“获取用户总数”后,Charles 成功捕获 SOAP POST,服务端返回 HTTP 200 OK,证明抓包链路有效。/WebService/Newcapec.eCard.ProxyWebService.asmx 的 POST,耗时约 330 ms、会话大小约 2.72 KB、HTTP 状态 200 Complete。测试程序同时提示“上报消费记录成功!”,WebService 返回值 100。本次仍仅上传历史流水,没有再次消费或扣卡。POST /WebService/Newcapec.eCard.ProxyWebService.asmx HTTP/1.1、Content-Length: 1933、Content-Type: text/xml; charset=utf-8、SOAPAction: "http://NewCap.com/NewCapecWebService/UploadBusinessRec"、Accept: text/xml、Host: 10.128.1.19、User-Agent: Microsoft-ATL-Native/7.00。UploadBusinessRecResult=true、retMessage=上传记录成功、retResult=100;此前根据测试程序弹窗记录的“上报记录成功”不是底层 SOAP 原文,现已纠正。503 与一卡通无关;目标 UploadBusinessRec 是唯一的一卡通消费 POST,状态为 HTTP 200 OK。evidence/2026-09-12-android-onecard-upload-success.txt。evidence/2026-09-12-onecard-upload-success.har,SHA-256 041acd650f26a52c5df71ce89cd19d50fabfa884b13789a3d32f3ed845b46220。evidence/2026-09-12-onecard-upload-success-request.txt。evidence/2026-09-12-onecard-upload-success-response.txt。UploadBusinessRec 条目提取。本次未执行暂存、提交、推送、拉取、分支切换或其他 Git 写操作;未修改用户已有的 .superpowers/ 未跟踪目录。