⑤ 签约首付与放款到商户

手机分期与现金贷差异最大的一段:新增首付收款(入金)+ 放款方向改到商户。资金链复用 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→Paidbns 编排改造首付到账(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)走 createDebitOrderOrderTxnBusiness:184BeforePaymentLA: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 需支持「首付挂账 → 放款时合并出账」的编排。
  • 放款本金 = 分期本金(合同金额);商户最终一笔收到 = 分期本金 + 客户首付 = 商品全款。