拆单支付和多笔退款

    • solution
  • 关于高客单价商品的订单模型设计。

    为什么需要?

    常规的电商订单设计里,是没有拆单支付这个概念的。一个订单,一个商品,一次支付,这是电商订单的基石。哪怕是一次购买几件商品的订单,付费成功后,系统也会将订单给拆分为一一关系。

    但在高客单价的商品订单里就有不适合的用户场景。比如单价上万甚至几十万的产品,会遇到用户需求将一个商品分多次来完成付款,例如使用微信钱包支付一部分,使用支付宝支付一部分,使用信用卡支付一部分。

    此时如果说继续使用通常的电商订单模型,商家要么让用户自己解决问题,比如汇集金额到一个账户来完成付款。要么就需要客服人员来修改原订单价格,再创建几个补差价的订单,让用户完成多个订单来购买一个目标商品。

    如此带来的问题:

    1. 用户体验变差,延长了结单流程

    2. 需要操作人员参与交易流程

    3. 订单和商品不再绑定导致的财务核销问题

    所以我们理想的用户场景:用户可以自己将高客单价订单按自己理想的方式拆分付款,完成交易,多笔入账关联到一个商品上去。

    同样,在高客单价订单里,特别是出售长期服务时间的商品中。出现售后议价等场景,这时多笔退款无疑也是有支持的必要性。

    支付流程

    故此,为了解决这个特定业务形态下的问题,需要对通常的订单结构进行修改。

    常见的订单流程

    1. 用户下单,生成商品订单
    2. 用户通过第三方支付渠道完成支付
    3. 收到支付渠道的到账确认后,记录第三方支付流水号对账,并发送商品,完成订单交易。
    4. 如果本订单之后产生退款,尽可能的从原支付途径退款。如果原支付渠道由于超时等原因,无法原支付途径退款,那么进入财务出账系统。

    订单结构:

    商品订单(订单号)
    |— 支付流水
    |— 退款流水
    

    为了支持拆单支付、多笔退款,将订单结构调整为:

    商品订单 (订单号)
    |— 支付流水A
       |— 退款流水A1
       |— 退款流水A2
    |— 支付流水B
       |— 退款流水B
    

    从原本的支付和退款都基于订单来关联,调整为向上绑定关系。

    一个商品订单创建时,生成默认的支付流水,当满足条件时,用户可以自己在订单支付界面进行拆分操作,比如原本100%金额的支付流水拆分成2个50%的支付流水,然后在分别完成支付。

    系统在收到全部支付流水完成支付,才判定为订单支付完成。在这个过程中,如果长时间只收到部分金额,那么还需要设计一个订单超时自动将已收款项退回给用户的功能。

    商品订单 (订单号)
    |— 支付流水A (已支付)
       |— 退款流水A1 (订单超时,未全额到账自动发起退款)
    |— 支付流水B (未支付)
    

    在这个结构模型下,基于原路进原路出的原则,退款将从支付流水下生成,绑定的关系其实已经是支付流水,间接关联商品订单。

    原路进原路出:资金的流动本身,其实是有成本的,比如银行转账;支付宝、微信等第三方支付商的收款、出款。