⑤ 签约首付与放款到商户
手机分期与现金贷差异最大的一段:新增首付收款(入金)+ 放款方向改到商户。资金链复用 fcs→pmt 事件桥,改的是收/出金账户。
概述
| 项 | 内容 |
|---|---|
| 起点 | 额度生效,客户确认方案 |
| 终点 | 商户收到商品全款,借据生效 |
| 参与方 | 客户 / SA / PocketBuy SA / bns-gateway / bns / fcs / pfs / pmt / 支付通道 / 渠道中心 |
| 资金 | 客户首付→三方虚拟账户;我方放分期本金;合计=商品全款→商户 |
时序图
sequenceDiagram autonumber actor C as 客户 actor SA as SA participant App as PocketBuy SA participant GW as bns-gateway participant BNS as bns 编排 participant FCS as fcs 账务 participant PFS as pfs participant PMT as pmt 支付 participant CHAN as 支付通道 participant CH as 渠道中心(新) Note over C,CH: ① 签约(改造) C->>App: 确认最终方案 App->>GW: 确认签约 GW->>BNS: 发起签约 BNS->>PFS: 取合同模板(分期) BNS->>FCS: 生成电子合同 FCS-->>BNS: 待生效合同 C->>App: 签署电子协议 Note over C,CH: ② 首付收款(订单管状态, pmt 管资金通道) alt 客户自付 C->>CHAN: 付首付至三方虚拟账户 CHAN-->>PMT: 首付到账回调 else SA 代收现金代付 SA->>App: 代收现金 + 代付至虚拟账户 App->>GW: 提交 SA 代收确认 GW->>BNS: SA 代收确认(业务) CHAN-->>PMT: 代付到账回调 end Note over PMT: 首付资金虚拟账户在途持有(不抵借据, 不建业务状态机) PMT-->>BNS: 首付到账通知 BNS->>BNS: 更新订单 Signed→Paid(首付到账) Note over C,CH: ③ 放款到商户(bns 组装指令, fcs 建据发事件, pmt 合并出账) BNS->>BNS: 校验订单已 Paid(首付到账, 硬前置) BNS->>CH: 取商户收款账户(store_id → 收款三件套) CH-->>BNS: 收款三件套 BNS->>FCS: 用信/占额/建借据(本金 P, 关联订单, 传入商户账户 + 首付关联) FCS-)PMT: 放款事件(本金 P + 收款方商户 + 首付关联, 复用事件桥) PMT->>PMT: 合并在途首付 D + 放款本金 P = 商品全款 PMT->>CHAN: transfer 商品全款至商户账户(一笔) CHAN-->>PMT: 转账成功 PMT-)FCS: 放款回流(本金 P) FCS->>FCS: 借据生效, 回流只记本金 P(首付 D 不进 fcs) FCS-->>BNS: 放款成功 BNS-->>App: 放款成功通知
接口落地
| 阶段 | 接口 | 提供方 | 性质 | 说明 |
|---|---|---|---|---|
| 签约 | 取合同模板 | pfs | 改造 | 分期合同模板 |
| 签约 | 生成电子合同 | fcs | 改造 | 复用合同能力,分期条款 |
| 首付 | 首付收款(虚拟账户通道) | pmt | 改造 | 复用 pmt 虚拟账户(createAccountNum) + 入账回调(vpRepayCallBack) + 通道交互;只做收款 + 在途持有 + 到账通知,不建业务状态机(见下「pmt 首付改造点」) |
| 首付 | SA 代收确认(业务) | bns 编排 | 新增 | SA 代收现金的业务确认(资金走虚拟账户通道);与客户自付到账殊途同归 |
| 首付 | 订单首付状态 Signed→Paid | bns 编排 | 改造 | 首付到账(pmt 通知)→ 订单转 Paid;状态机见 手机分期订单状态机 |
| 首付 | 首付到账确认 → 触发放款 | bns 编排 | 新增 | 首付到账硬前置放款(已确认):订单非 Paid 不放款 |
| 放款 | 取商户收款账户(store_id→收款三件套) | 渠道中心 | 新增 | 门店收款账户 = 账户号(NUBAN) + bankCode + 户名;由 bns 编排按订单 store_id 取(fcs 不直接查渠道) |
| 放款 | 组装放款指令(门店收款账户 + 本金 P + 首付关联) | bns 编排 | 改造 | bns 取齐门店账户/首付信息,随建借据请求传入 fcs。手机分期不走现金贷 loanApplyCallBack 回调,由 bns 编排发起 |
| 放款 | 用信/占额/建借据(本金 P, 关联分期订单) | fcs | 改造 | 借据本金=P;放款收款账户(bankCode+账户号)由放款指令入参传入(现状 createDebitOrder 入参,现金贷值来自回调;手机分期改传门店账户);借据关联分期订单(IMEI 交机回填,不落借据) |
| 放款 | 放款到商户账户(合并一笔) | pmt | 改造 | 复用 fcs→pmt 事件桥 + 通道 transfer,改出金目标=商户;合并在途首付 + 放款本金 = 商品全款,一笔 transfer |
| 放款 | 放款回流入账 | fcs | 复用 | 复用现金贷回流;只记借据本金 P,首付 D 不进 fcs(04-放款) |
pmt 首付改造点(pmt 只管通道 + 资金,不管业务状态)
pmt 已有虚拟账户与通道收款技术能力,改造在收款语义,业务状态/编排归 bns/订单:
| 维度 | 复用 | 改造 / 新增 | 归属 |
|---|---|---|---|
| 通道收款 | 通道 charge/回调、HttpExecutor、/pmt/outCallbackPayment 入口 | — | pmt |
| 虚拟账户 | 建虚拟账户(createAccountNum) + 入账回调(vpRepayCallBack 机制) | — | pmt |
| 收款语义 | — | 首付不走还款销账(放款前借据未生效);作「在途资金」持有,不抵借据 | pmt |
| 到账通知 | — | 收到首付 → 通知 bns(pmt 不判断”够不够/能否放款”) | pmt |
| 合并出账 | — | 放款时按指令合并「在途首付 + 放款本金」一笔 transfer 给商户 | pmt |
| 首付业务状态 | — | 订单 Signed→Paid、应收金额、退款 | bns/订单(非 pmt) |
| 放款编排 | — | 取商户账户 + 首付关联,组装放款指令,硬前置校验 | bns(非 pmt) |
现状证据:pmt 虚拟账户入账写死
"virtual account repay"(还款语义);CfkLoanProduct.minDownpaymentRatio说明首付比例参数已传导到 pmt,但首付收款动作无 → 改造而非从零。
缺口小结
- 三层分工(已厘清):业务订单/bns 管首付业务状态(Signed→Paid)+ 组装放款指令;pmt 只管首付收款通道 + 在途资金 + 合并出账;fcs 只管借据本金 P 与放款回流,不查渠道、不碰首付。
- 首付到账硬前置放款(已确认):pmt 报到账 → bns 转订单 Paid → bns 校验 Paid 才发起放款。
- 首付收款 pmt 承担通道(已确认):复用虚拟账户/通道收款 + 在途持有 + 到账通知;业务状态在订单,不在 pmt。
- 放款方向改造:现金贷放款到客户、手机分期放款到商户。复用资金事件链,改 transfer 目标账户。
- 收款账户从「回调入参」换成「门店账户」(研发关注点):放款(LA)走
createDebitOrder(OrderTxnBusiness:184,BeforePaymentLA:207调),收款账户(bankCode+账户号)是入参传入——现金贷的值来自 loanApplyCallBack 回调入参(客户账户)。手机分期不走该回调,由 bns 编排按订单 store_id 从渠道域取门店账户,填这两个入参(机制不变、只换值);放款指令到 pmt 的收款字段(PaymentBankInfo:bankCode/cardNo)填门店值。决定放款去向的是账户号+bankCode。(注:getBankInfo是还款路径、现状注释返回空,与放款无关。) merchant_name不是收款方:它是我方在通道侧的收单/代付商户标识(如Paystack-allcredit_1),pmt 用它选对应密钥(getAuthorizationSecretKey);放款/还款都需、与”收款给哪个门店”无关,手机分期保持原义不变。- 放款触发——为何不走 loanApplyCallBack:现金贷
loanApplyCallBack是”审批通过即放款”的直连回调,入参收款账户是客户的(bankAccNo/bankCode)。手机分期审批通过(Approved)后还有 签约(Signed)+ 首付到账(Paid) 两道硬前置,放款时机由订单 Paid 驱动、收款方是门店——时机(多了签约/首付前置)和入参(门店账户≠客户账户)都对不上,故不复用这个入口;改由 bns 编排在订单 Paid 后发起放款指令。fcs 建据 + 放款事件桥机制仍复用(见 01-业务编排域)。 - 借据关联分期订单(非加 IMEI):借据关联分期业务订单(订单承载商户/商品/SKU/SA/售价),借据本身不冗余商品/设备字段。IMEI 在交机环节才产生(放款后注册),交机回填到订单,不在建借据时落库;锁机/对账通过借据→订单关联取。
- 资金合并方式:合并一笔(已确认)——首付先收进虚拟账户挂账(在途,不抵借据),放款时 pmt 合并「虚拟账户首付 + 放款本金 = 商品全款」一笔 transfer 给商户(商户一笔到账)。pmt 需支持「首付挂账 → 放款时合并出账」的编排。
- 放款本金 = 分期本金(合同金额);商户最终一笔收到 = 分期本金 + 客户首付 = 商品全款。