OnecardDemo 本地消费与服务器单点功能设计

目标与范围

在现有 Java Android Demo 中补齐 CPU 用户卡本地消费,以及一卡通 WebService 连接、查询和消费记录上传。各能力独立操作、独立显示;本阶段不串成正式业务流程。

硬件与协议证据

项目结论状态
用户卡/控制/PSAMHID 通道 1/2/3抓包确认
现金/补助钱包EC11/EC12现金扣款已验证;补助扣款待验证
消费链路80 50 → PSAM 80 7080 54 → PSAM 80 72Windows 1 分消费确认
HID 长请求每片最多 24 字节抓包确认

样本余额 604→603 分,计数 43→44;PSAM 卡号 000621000206,PSAM 序号 62,TAC A4441B33

本地消费

账号、消费额、钱包策略和消费时间毫秒值全部必填。钱包策略支持补贴优先自动分账、主钱包 0、补助钱包 1。时间转换为 yyyy-MM-dd HH:mm:ss,APDU 使用 7 字节 BCD。

  1. 读取并校验卡片、账号、状态和余额。
  2. 激活控制与 PSAM 通道,读取 PSAM 信息。
  3. 卡片消费初始化。
  4. PSAM 计算交易序号与 MAC1。
  5. 卡片扣款并返回 TAC/MAC2。
  6. PSAM 确认。
防重复扣款:80 54 已发送但结果不可信时禁止自动重试;应先重新读卡核账。PSAM 确认失败不代表卡片未扣款。

补贴优先

WebService 单点功能

服务器地址和应用 ID 均必填;SOAP 1.1 命名空间为 http://NewCap.com/NewCapecWebService/

功能SOAP 操作附加必填
单个用户GetInfoByCustID账号
部分用户GetCustomerByNum起始账号、数量
全部/总数GetCustomerCount、分段 GetCustomerByNum
黑名单GetBLLTCountGetBLLTAll
部门GetCustDeptCountGetCustDeptInfo
上传UploadBusinessRec上传结构全部字段

上传字段

UPLOADINFO 的 16 个输入字段全部需要提供:termID、custID、cardNO、cardSn、cardClass、cardASN、sumFare、mngFare、objNo、opFare、oddFare、opCount、jyDT、psamID、psamJyNo、tac。数值可为 0 但不得留空;rtn 是输出。

页面与验收

主页面增加本地消费区域和服务器功能入口;服务器单点页面集中提供连接、查询、上传和可复制结果区。现金消费需 Android 1 分真机验收;补助钱包需有补助余额卡;SOAP 与上传需真实服务器。构建或单元测试通过不能替代这些现场门禁。

不在本阶段范围

不实现自动上传、失败补传、消费流水数据库、注册码/混淆 key 生成、M1/NFC 复合卡或其他项目 PSAM 的兼容性承诺。