实战丨从0到1搭建结算平台

news2024/11/18 13:52:54

一、概述

我们最开始分享了O2O电商支付清结算体系,接着分享了如何从0-1搭建计费体系,接下来我们分享:各方的钱算完之后怎么付出去,也即结算平台建设的实操与设计思路。

1.什么是结算?

说结算平台之前,先说一下业务上的结算概念,结算顾名思义就是平台把系统计算好的资金结算给对应的供应商、分销员、劳动者等交易参与方,资金结算主要有2种结算方式:

第一种也是看起来最简单的:平台线下转账给被结算对象,业务前期阶段,业务量不大的时候这样运转还行,后续随着业务的起量,极大概率会出现结账周期时全员变财务/核算、打款出错、下游结算对象催打款等一系列问题。

第二种也就是本次要分享的:通过系统手段,线上自动打款给下游结算对象,根据实际业务的需要,线上又可以打款至微信、支付宝、银行卡(对公/对私)、平台账户,线上结算搭建完之后,可以把结算能力放给所有的业务线复用。

2.结算平台的落地形态

上文解释了业务上结算的概念,技术上结算系统就是根据业务实际需要而搭建的实体化系统设施,通过系统化手段在线完成资金的打款发放。

结算平台与计费系统作为清结算体系中重要的组成部分,计费平台把订单的业务信息流转变成转化为资金信息流,结算平台把资金信息流转化成实实在在的结算资金流。

在多业务线、多种结算类型的平台中,结算平台可以做成通用的中台系统,单纯作为资金出款的统一出口,至于结算到平台账户还是微信/支付宝零钱,又或者是银行卡账户,都依赖于业务侧计费系统的通知,结算平台只是执行结算指令(如上图所示),同时做好资金风控兜底,防止资金结算倒挂。

搭建结算平台的优点是结算平台可以制定统一的接入规范,各业务系统统一对接结算平台即可,无需再对接底层通道或账户中心,大大降低系统重复对接开发量。

注:可能会有人会说这种系统架构,平台涉及到“二清”问题,确实会涉及到,但大公司有牌照不会有这个问题,其他公司如果不是大额融资或者上市大概率也不会涉及到这个问题,个人觉得在公司体量没有到达一定级别前,不要太纠结这个点。

后续也会分享平台“二清”的解决产品方案,可以期待下。

二、结算平台系统架构

不同公司根据业务模式与技术组织架构的不同,所适合的结算系统间架构也不同,在这分享自己参与过的也是比较常见的2个系统架构,详见下图:

系统架构1(O2O自营B2C电商)

说明:上图是我们当前正在用的结算系统架构,因为公司存在多条业务线,且不同业务线在完成订单清算后流程不同,有的需要平台进行结算单调整/审核,有的业务线则不需要,所以结算调整/审核相关的模块,统一放到了业务侧,结算系统最终只负责结算打款的职能,作为一个资金出款的前置通用系统,放在中台体系内,各业务系统统一对接结算平台。

系统架构2(类自营B2B电商)

说明:上图是我之前公司经历过另一种系统架构,与图1的区别除了需要发票相关的模块(灰色)之外,最大的区别就是把结算单调整/审核相关的功能,统一放到了结算模块中,因为所有的业务线关于清算之后的流程是相同的,可以抽象为一个统一的模块,计费模块单纯完成费用计算即可。

当然以上2个系统架构也不是万能架构,算是比较通用的2种设计思路,但如果公司业务比较简单,可能都不需要分成2个系统,直接计费与结算放在一个系统就OK,每天念三遍:系统不重要,业务最重要。

系统交互流程说明:

以上2种系统架构,系统间整体交互流程很相近,第一步各业务系统的计费模块完成各种资金类型的清算计费,根据清算结果生成结算单,完成结算单调整确认后,请求结算平台统一结算接口,结算系统根据业务侧所需结算方式,请求底层支付平台或帐户中心接口,完成账户中心入账或通道打款,下文也会详细说明。

小结:结算模块的整体系统架构大同小异,具体采用什么样的系统架构一定要根据平台自身的业务需要,整体原则是:以满足业务为前提,追求系统通用,防止重复造轮子。

三、结算平台系统搭建

上文我们分享了结算平台的系统架构,接下来分享怎么从0到1真正落地搭建起1个结算平台,我接下来会把上文中的2种系统架构,都展开说下,2者可以互相结合着看。

下文主要从4方面展开:业务流程、系统交互流程、页面原型及核心规则、关键接口说明。

系统架构1(O2O自营B2C电商)

1.业务流程

上图为O2O自营B2C电商劳动者薪资报酬结算业务流程,首先说下这个流程不是通用的,各平台可根据自身提供服务的标准化程度及履约复杂度灵活调整,例如滴滴与外卖配送是非常标准的O2O服务,结算环节不需要审核,直接结算即可,但比较复杂的家政服务与互联网装修服务,肯定会加上比较多审核确认环节。

2.系统间交互流程

上图是各业务系统与结算系统间的交互流程,这里的业务系统包括不限于各业务线计费系统、劳动者奖惩系统、分销平台等等。

此架构下,各业务系统与结算系统的交互相对比较简单,业务系统只需要传输对应金额、结算渠道等核心参数,结算系统请求下游系统即可。

3.页面原型及核心规则

以O2O自营B2C电商的系统架构为基础的结算系统,页面原型相对不会太多,因为主要系统模块都已经被上游业务计费系统承担,忘记的可以去看下计费系统搭建的内容回顾下,原型主要分为2部分:

平台侧:费用类型管理、结算规则配置、结算记录如下图:

(1)费用类型管理

因为后续分享账户中心的时候也会用到费用类型,这次先重点说下:

费用类型的含义及作用:费用类型表象上就是结算资金的名称,简单来说这就是是一笔什么钱,再往上抽象一层,1个费用类型代表了业务的1个计费场景,对应了一个具体的计费规则(前提是费用类型颗粒度要足够细化)。

他们之间的关系如下图简单举例:

业务场景:费用类型=1:1或1:N

费用类型:计费场景/规则=1:1

费用类型的命名原则:简短同时要能反映费用的业务属性,账户中心记账的时候,账务流水就会很清楚,劳动者可以很直观地就知道这笔钱的因为什么进来,这笔钱为什么被扣掉,如下图所示:

费用类型在系统间流转过程:当上游业务侧新增一个计费场景时,结算系统会新增1个费用类型,具体新增费用类型的运营流程,看自己公司要求,结算系统配置完成后,将费用类型编码同步至业务侧,业务系统需要将此编码维护在系统中。

当此费用类型的资金进行结算时,需要传费用类型编码ID,同时如果需要结算到账户中心,则账户中心也需要同步添加费用类型编码,因为账户中心需要根据费用类型编码确定入到哪个账户中,流程如下图:

(2)结算规则管理

结算规则说明:费用类型新增之后,需要为费用类型配置结算规则,结算规则的主要作用是确定此费用类型的结算渠道,即结算到劳动者的微信零钱还是银行卡,亦或是平台账户中,如果要结算到平台账户,还需要在账户中心配置此费用类型的入账规则及冻结规则,确定费用类型入到哪个账户及要不要冻结,流程见下图:

从上图可以看到,一个费用类型可以配置多条结算规则,但业务系统请求结算系统接口时,会根据业务线匹配唯一结算规则,防止重复结算,若结算时未匹配到结算规则,系统会直接报错。

有一个点需要注意的是,如果平台内资金结算渠道只有一种,所有的费用类型都只结算到银行卡或者平台账户,则不需要配置结算规则,直接系统写死即可,甚至可以不要单独做结算系统,没有意义,因为此系统架构下结算单生成/审核/调整都已经与计费模块融合,由计费系统(不仅仅是计费)直接请求底层通道或者账户中心即可。

归根结底一句话:视自己平台真实业务需要,做对应系统建设,忌自嗨忌华而不实。

(3)结算记录

O2O电商结算有一个特点,都是按订单逐笔结算,即劳动者完成服务,工资报酬即结算至平台账户,然后各平台根据各自业务需要,设置提现窗口期或设置冻结时间。

上述原型图中有两个字段特殊说明下:

一是【订单号】,逐笔结算的结算记录一定要加上订单号,运营有问题找过来的时候,大多数只发个订单号过来,同理账户中心也要加订单号(有的话)。

二是【结算状态】,要以最底层出款通道或账户中心的最终入账结果为准,不能业务系统请求结算系统接口成功了就返回上游系统结算成功,可以异步通知慢点儿,不然可能会造成上游业务系统显示的结算结果有误。

4.关键接口设计

结算系统最核心的就是结算的接口,各业务系统请求此接口,完成资金的打款结算,下图是接口入参必填参数,根据结算渠道的不同,业务系统需要传对应参数进来,例如结算到微信要传openid、结算到银行卡要传银行卡号、开户行等等,这个直接看底层通道需要什么参数即可,不再赘述。

系统架构2(类自营B2B电商)

1.结算业务流程(类自营电商B2B)

这个系统架构与系统架构一(O2O自营B2C)业务流程比较大的区别在于,因为业务模式与结算金额(多笔合并结算、大额)的原因,结算单审核/调整成为了一个必要流程,并且部分平台还会涉及到开票流程。

开票流程又分为2种:

第1种:先开票后结算(上图),即商户侧根据平台推送的结算单开具发票并上传,平台发票审核通过后,方可进行实际资金结算流程,这个方案的好处是优先保证平台的利益,同时也降低了结算单与发票金额数据不一致的概率(结算单金额与发票金额),降低后续运营与商户的人力负担。

第2种:开票与结算相互独立,无明确先后流程,好处是可以保证结算时效,商户侧的资金回款效率与结算体验更好,坏处就是上个流程中的好处,大家可以根据自身平台需要选择合适的方案。

2.结算系统间交互流程(类自营电商B2B)

上图是类自营B2B电商结算系统交互流程,我用的是计费模块和结算模块,而不是系统,因为他俩可以放在一个系统,特别是业务线不多,计费模式与结算类型都比较单一的平台,完全没有必要做2个系统。

单独说一下结算单生成的时间点,比较常见的方案是:根据约定的账期,在账单日通过凌晨定时任务生成本账期结算单。

还有另一个方案:进入到下一账期即生成结算单,举例:T月账期过去,进入到T+1月1号即生成T+1月的结算单,数据清算完成即填充数据至结算单,只是这个结算单不会推到商户后台,只在平台侧展示,但是账单的总额数据可以展示给商户侧,以便让商户知道自己T+1月的数据概览情况。

3.页面原型及核心规则

此系统架构下,平台侧页面原型主要分为计费管理、结算单管理、发票管理,计费管理主要是完成订单资金计费,生成清算明细数据,上一篇计费系统从0到1搭建已经详细介绍过,不再赘述。

商户侧后台主要有结算记录与发票管理2个功能模块,模块展示的信息和平台侧基本一致,大家可以直接看平台侧相关原型内容,也不再赘述。

(1)结算单管理

关于原型图和规则主要说几个点:

上图中三个状态字段的关系:结算单状态、发票状态、结算状态,3个状态依赖与先后关系如下图所示:

结算单导出内容:因为对公结算多是汇总轧差结算,所以结算单导出后是一条条计费明细,包括正向与逆向数据,最常见的结算单就是三方支付机构给的结算对账文件,结算单导出后如下图所示,可以根据自身需要增删字段:

结算单生成规则:以商户为纬度,以账期为时间范围,把发生在此账期范围的所有费用类型的计费明细数据写入商家对应结算单中。

结算风控:一是结算系统要防止资金倒挂,即结算单中各订单累计金额要大于等于结算金额,做兜底,二是防止订单逆流程带来的资金损失风险,例如平台承诺7天无理由退货,如果账期是5天,会存在资金已经结算至商家,即便扣除商家保证金,退款资金仍然不够的风险。

解决方案有几个方向:限制结算账期、限制结算金额(有风险的结算金额不能超过保证金兜底的金额)、入驻合同中约定好商户资金不足,平台垫资的资金怎么处理,可以根据平台实际情况选择对应方案。

(2)发票管理

说明:结算单审核通过后,商家在后台上传发票图片,财务在平台侧【发票管理】完成发票审核/核销,没问题后结算模块请求底层账户中心或支付平台完成资金结算,同时商家侧快递纸质发票至平台,如果做的再完善些,平台还可以对接快递的接口,可以在后台查看快递进度。

4.关键接口说明

接口部分与上文的O2O自营B2C电商的系统架构很相似,直接看上文即可,不再赘述。

四、总结

结算系统根据平台的业务模式不同,大致有我上文中的2个设计方向,整体复杂度可控,重点要保证结算效率与时效,同时保证资金安全,不要出现重复结算及资金结算倒挂的问题。

原文出自:https://www.toutiao.com/article/7185762732677956108/?log_from=1393afe3a5eba_1673145854060

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/148268.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

22年 | 年前总结 | 主业谋生存,副业谋发展

22年关键词 复盘 | 极简 | 长期主义 | 阅读 | 斜杠青年 | 一事无成 | … 当然了,2023也会继续延续某些关键词。 一壶清酒,敬这红尘也敬我 很多人都在说,疫情存在的时间比任何一段恋情还要长。 而我想说,我失败的次数还超过了做…

Java设计模式中策略模式是怎么回事/怎么替代繁琐if-else语句/如何优化条件选择语句

继续整理记录这段时间来的收获,详细代码可在我的Gitee仓库SpringBoot克隆下载学习使用! 6.3 策略模式 6.3.1 概述 定义了一系列算法,并将每个算法封装起来,使它们可以相互替代,且算法的变化不会影响使用算法的用户属…

【自学Python】Python注释

文章来源嗨客网(www.haicoder.net) Python注释 Python注释教程 用于注解说明解释程序的文字就是注释,注释提高了代码的阅读性。一旦程序中某部分内容被注释掉,则该内容将会被 Python 解释器忽略,换句话说&#xff0c…

一般颜色直方图

颜色直方图是一种用于图像处理和分析的图表,它可以显示图像中不同颜色的数量。通常,颜色直方图会将颜色分成几个色调区间,每个区间对应一个条形图,其中条形图的高度表示该色调区间中的像素数量。通过颜色直方图,你可以…

Mask RCNN网络源码解读(Ⅰ) --- 语义分割前言与转置卷积

目录 1.什么是语义分割 2.语义分割常见的数据集格式 3.常见的语义分割评价指标 4.转置卷积 1.什么是语义分割 常见分割任务:语义分割、实例分割、全景分割 图一 原始图片图二 语义分割图三 实例分割语义分割(例如FCN网络)可以理解为一个…

开发与项目经理之间的打情骂俏——数据库篇

👦👦一个帅气的boy,你可以叫我Love And Program 🖱 ⌨个人主页:Love And Program的个人主页 💖💖如果对你有帮助的话希望三连💨💨支持一下博主 由数据库引发的一系列探…

小论文写作指南(AI类)

参考b站沃恩智慧课程 论文结构 标题:不要太长或太短,抓住重点,简明扼要。 作者:你的作品一定力争一作,通讯作者是导师/大老板/出资人。 摘要Abstract:点明大背景(如为什么研究微表情识别,对社会有什么价值,拔高立意层次),阐述目标(我们提出模型为了在什么问题上达…

9个时间序列交叉验证方法的介绍和对比

评估性能对预测模型的开发至关重要。交叉验证是一种流行的技术。但是在处理时间序列时,应该确保交叉验证处理了数据的时间依赖性质。在之前的文章中,我们也做过相应的介绍。 在本文中,我们收集了时间序列的常用的9种交叉验证方法。这些包括样…

【博客578】LVS NAT配合MASQUERADE实现FULLNAT的场景,及此场景下net.ipv4.vs.conntrack参数的重要作用

LVS NAT配合MASQUERADE实现FULLNAT的场景,及此场景下net.ipv4.vs.conntrack参数的重要作用 1、LVS基本原理: 流程: 当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间 PREROU…

第6章 线程通信

6.2.1 管道 管道是一个线性字节数组,类似文件,使用文件读写进行访问;在程序里面,创建管道需要使用popen()或者pipe(); 管道的一个重要特点是使用管道的两个线程之间必须存在某种关系, 例如,使用popen需要提供另一端进程的文件名,使用pipe的两个线程分别隶属于父子进…

Linux常用命令——fgrep命令

在线Linux命令查询工具 fgrep 为文件搜索文字字符串 补充说明 fgrep命令是用来搜索 file 参数指定的输入文件(缺省为标准输入)中的匹配模式的行。fgrep 命令特别搜索 Pattern 参数,它们是固定的字符串。如果在 File 参数中指定一个以上的…

dp刷题(三)编辑距离(Hard)

编辑距离_牛客题霸_牛客网 描述 给定两个单词word1和word2,请计算将word1转换为word2至少需要多少步操作。 你可以对一个单词执行以下3种操作: a)在单词中插入一个字符 b)删除单词中的一个字符 c)替换单词中的一个字…

C#,图像二值化(14)——全局阈值的最佳迭代算法(Iterate Thresholding)及源代码

1、图像二值化 图像二值化是将彩色图像转换为黑白图像。大多数计算机视觉应用程序将图片转换为二进制表示。图像越是未经处理,计算机就越容易解释其基本特征。 二值化过程 在计算机存储器中,所有文件通常以灰度级的形式存储,灰度级具有从0…

Vue基础入门小demo——记事本

文章目录 📋前言 🎯demo介绍 🎯完整代码 🎯最终效果 🎯案例分析 📋前言 记事本(不是操作系统的那个记事本,是一个简单的网页版本记事本)是一个较全面的Vue指令集合案…

迁移学习简要

什么是迁移学习 迁移学习是一种机器学习方法,就是把任务为A的开发模型作为其的初始点,重新使用在任务为B的开发模型的过程中。迁移学习是通过从已学习的相关任务中转移知识来改进学习的新任务。虽然大多数机器学习的新 算法都是为了解决单个任务而设计的…

Exynos_4412——IIC控制器和MPU6050

目录 一、Exynos_4412下的IIC控制器 二、IIC寄存器 三、MPU6050原理 MPU6050 MPU6050的主要参数 MPU6050通信接口 MPU6050官方芯片手册 MPU6050寄存器 四、MPU6050寄存器读写时序 向MPU6050写一个字节数据 向MPU6050读一个字节数据 五、IIC编程 六、小项目 Exynos…

Linux内核中断子系统

查看中断控制相关的设备树节点 *********************gpiof控制器*************************pinctrl: pin-controller50002000 {#address-cells <1>;#size-cells <1>;compatible "st,stm32mp157-pinctrl";interrupt-parent <&exti>;gpiof…

数据结构与算法三【树】

二叉树性质 满二叉树 深度为k&#xff0c;有2k−12^{k}-12k−1个结点的二叉树&#xff0c;为满二叉树。 完全二叉树 完全二叉树的定义如下&#xff1a;在完全二叉树中&#xff0c;除了最底层节点可能没填满外&#xff0c;其余每层节点数都达到最大值&#xff0c;并且最下面…

【jQuery】常用API——jQuery选择器

一、 jQuery基础选择器原生JS获取元素方式很多&#xff0c;很杂&#xff0c;而且兼容性情况不一致&#xff0c;因此jQuery给我们做了封装&#xff0c;使荻取元素统一标准。$(“选择器”); //里面选择器直接写CSS选择器即可&#xff0c;但是要加号<script src"../jquery…

Ubuntu18.04系统 部署python3.9.0 源码编译安装及pip配置全过程记录

1.Ubuntu系统镜像下载和基本配置 1.1 镜像下载 镜像下载&#xff1a;https://cn.ubuntu.com/download/desktop 1.2 配置静态IP 配置固定IP方式&#xff1a; Ubuntu18之前在/etc/network/interfaces进行配置&#xff0c;Ubuntu18及之后版本在/etc/netplan/*.yaml进行配置&am…