5.0 KiB
酒店结账全部结算接入
启用和发布
全部结算直接启用,预检、受理及后台执行由业务流程和权限控制。完成迁移、第三方及钱包全部实例部署、前端和角色授权后即可使用。
第三方配置将已申报的酒店业务结算结果发送至钱包。当前支付宝付款应用使用 ali-pay-config 的证书配置。
app-plus:
transfer:
notify-targets:
hotel-checkout:
service-id: pjcloud-wallet-biz
服务名按实际注册名核对。转账场景固定为“业务结算”,背景类型为“结算款项名称”,内容包含原酒店结账单号。先在支付宝完成转账产品签约、场景申报和 alipay.fund.trans.order.changed 应用网关订阅。
发布顺序为业务迁移 → thirdparty → 钱包全部实例 → 前端及权限。钱包新任务使用独立扫描器,每5秒最多100条、4个Worker、120秒数据库租约。既有第三方提交、查单、通知任务仍依赖已部署的Quartz。
本次迁移文件为 db/20261110_add_mch_checkout_bill_transfer.sql,创建批次及付款尝试两张表,并兼容原商户付款表的 ck_checkout_merchant_paid 约束。仅固定 HCP+雪花ID 转账指令在已确认实付等于应付时允许渠道时间暂缺,原付款登记继续要求付款时间。脚本支持重复执行。编写迁移与执行数据库分开安排。
默认收款配置
使用商户当前支付宝支付配置的唯一默认关系。默认关系中的接收方类型、完整标识及可选实名作为转账依据。关闭分账时仍可维护收款字段,实际转账前统一校验。
| 关系接收方类型 | 转账身份 | 必要条件 |
|---|---|---|
userId |
ALIPAY_USER_ID |
有效接收方标识 |
openId |
ALIPAY_OPEN_ID |
有效标识,关系所属应用与付款应用一致 |
loginName |
ALIPAY_LOGON_ID |
有效标识及收款实名 |
cardAliasNo |
预检异常 | 改配当前产品支持的身份 |
原始账号仅通过受保护的Feign获取,在钱包和第三方各自使用项目统一加密器保存固定指令。管理端展示脱敏账号及实名。分账开关、绑定结果和分佣比例不参与转账资格判断。
付款及恢复规则
- 点击“全部结算”读取整张账单所有待付款明细。预检令牌属于当前用户,有效十分钟,提交前重新读取酒店订单及收款配置。
- 已付款、已作废及无订单明细自动跳过。有订单且应付为零的商户记录确认结清事件。
- 正金额须在10~10000000000分之间。低于最低金额及超过单笔上限时整批预检阻止提交,保留原付款登记入口。
- 同一账单批次的请求号和预检令牌在超时重试时保持原值。已受理结果优先从数据库恢复,预检缓存到期后也可恢复原批次。
- 全量参与名单通过后原子保存付款授权。真实渠道执行允许部分成功。转账中明细使用
PAYING,待付款汇总包含这一状态。 - 付款成功才回写已付。付款时间采用渠道事实,未回传时显示“待渠道核实”,后台安排原单复核补齐。
- 明确失败释放当前付款尝试。再次付款先同步核对原单,再重新预检并由操作员确认。原单被明确拒绝且渠道确认无单时允许重新授权,其他未知结果继续保留转账中。
- 资金终态与订单差异分别记录。迟到成功按原付款尝试落账,存在后续付款尝试或终态冲突时冻结新付款并记录审计。
- 原任务失败退避最长5分钟,累计100次领取后暂停任务,保留原资金状态。在详情中“核对并恢复原单”后继续同号执行。
- 详情每5秒更新进度,跨批次尚有未收敛付款也持续刷新。通过操作记录中的批次ID可查询历史结果。
手工配置权限
| 名称 | 类型 | 父级菜单及真实ID | 权限标识 | 页面路由 | 组件路径 |
|---|---|---|---|---|---|
| 全部结算 | 按钮 | 商户结账记录,ID待确认 | wallet_mchCheckoutBill_transfer |
沿用商户结账记录菜单 | mch/checkout/record/index |
已有 wallet_mchCheckoutBill_view 负责查看历史转账进度。新的转账权限控制预检、真实付款受理和业务侧原单恢复。每个入口均校验整张账单完整历史归属权限。
验证边界
开发阶段使用源码语法、接口及状态路径核对。已补充接收方解析、精确金额、零元结清、请求恢复、付款结果幂等、旧版本和终态冲突的针对性回归源码。
集中验证时执行钱包与第三方测试及编译、前端检查及构建,使用隔离MySQL验证请求唯一约束、事务回滚、租约恢复及转账与付款登记/作废竞争。真实支付宝联调与数据库迁移执行单独安排。
隔离数据库用例读取 CHECKOUT_BILL_TEST_JDBC_URL、CHECKOUT_BILL_TEST_JDBC_USER、CHECKOUT_BILL_TEST_JDBC_PASSWORD,数据库名必须以 _checkout_bill_test 结尾,只创建和清理随机后缀测试表。