精华内容
下载资源
问答
  • 支付系统

    千次阅读 2018-08-24 09:57:32
    支付系统是连接消费者、商家(或平台)和金融机构的桥梁,管理支付数据,调用第三方支付平台接口,记录支付信息(对应订单号,支付金额等),金额对账等功能,根据不同公司对于支付业务的定位不同大概有几个阶段:第...

    一、概述

    支付系统是连接消费者、商家(或平台)和金融机构的桥梁,管理支付数据,调用第三方支付平台接口,记录支付信息(对应订单号,支付金额等),金额对账等功能,根据不同公司对于支付业务的定位不同大概有几个阶段:第一阶段:支付作为一个(封闭)的、独立的应用系统,为各系统提供支付功能支持。一般来说,这个系统仅限于为公司内部的业务提供支付支持,并且和业务紧密耦合。第二阶段:支付作为一个开发的系统,为公司内外部系统、各种业务提供支付服务,支付服务本身应该是和具体的业务解耦合。

      1.1支付是电商系统中核心

    支付是电商系统中核心

    我们先来看一下用户完成一次购物需要进行那些操作:

    用户购物流程

    通常消费者在手机APP或者网站都会涉及到支付相关的业务场景,用户只需要简单点击支付按钮输入支付密码,就可以完成整个支付过程,那么我就和大家一起来看看一个完整的支付系统有什么功能组成和设计时需要考虑那些问题。

    1.2支付系统的作用

    支付系统的作用

    从上图中我们可以看出真实的资金流向。首先当用户产生支付行为时,资金从用户端流向支付系统,退款时则相反,从支付系统回流至用户端。因此在整个交易过程中用户端与支付系统是双向资金的流动方式。对于支付系统而言,资金有进有出。从支付系统到商户端就比较简单了,在清算完成后支付系统负责将代收的资金结算给商户,通常结算的操作可以在线上来完成(采用支付公司代付接口或者银企直连接口来完成),也可以由公司财务通过线下手工转账的方式来完成,因此这种资金流动的方式是单向的。出于资金安全考虑,大多数公司通常这部分采用线下方式实现。

    真实的资金流由支付公司按照约定期限(通常 T+1 )结算到平台公司对公账户中,然后再由平台公司再按照交易明细进行二次清算后结算给对应的商户。

    二、支付系统

    一个支付系统需要由哪些功能模块组成

    支付系统

    2.1完整的支付系统包括如下功能:

    1. 应用管理: 同时支持公司多个业务系统对接。

    2. 商户管理: 支持商户入驻,商户需要向平台方提供相关的资料备案。

    3. 渠道管理: 支持微信、支付宝、银联、京东支付等多种渠道。

    4. 账户管理: 渠道账户管理,支持共享账户(个人商户)及自有账户。

    5. 支付交易: 生成预支付订单、提供退款服务。

    6. 对账管理: 实现支付系统的交易数据与第三方支付渠道交易明细的自动核对(通常T+1),确保交易数据的准确性和一致性。

    7. 清算管理: 计算收款交易中商户的应收与支付系统收益。

    8. 结算管理: 根据清算结果,将资金划拨至商户对应的资金帐户中。

    2.2核心流程

    支付系统有几个关键的核心流程:支付流程、对账流程、结算流程

    2.2.1支付流程

    支付流程

    1)支付流程说明

    1. 用户在商城选购商品并发起支付请求;

    2. 商城将支付订单通过B2C网关收款接口传送至支付网关;

    3. 用户选择网银支付及银行,支付平台将订单转送至指定银行网关界面;

    4. 用户支付完成,银行处理结果并向平台返回处理结果;

    5. 支付平台接收处理结果,落地处理并向商户返回结果;

    6. 商城接收到支付公司返回结果,落地处理(更改订单状态)并通知用户。

    一般而言支付系统会给商户设置有“可用余额”账户、“待结算”账户;系统在接收到银行返回支付成功信息会进行落地处理,一方面更改对应订单状态,另一方面在商户待结算账户记入一笔金额;该笔金额,系统会根据结算周期从待结算账户--->“可用余额”账户。

    2)退款流程说明

    1. 用户在商户平台发起退款申请,商户核实退款信息及申请;

    2. 商户登录支付平台账户/或者通过支付公司提供的退款接口向支付平台发起退款;

    3. 支付系统会对退款信息校验(退款订单对应的原订单是否支付成功?退款金额是否少于等于原订单金额?),校验商户账户余额是否充足等;校验不通过,则无法退款;

    4. 支付系统在商户可用余额账户扣除金额,并将退款订单发送至银行,银行完成退款操作。注意:对于网关收款的订单退款,各银行要求不一,有些银行提供的退款接口要求原订单有效期在90或180天,有些银行不提供退款接口;针对超期或者不支持接口退款的订单,支付公司通过代付通道完成退款操作。

    对于收单金额未结算,还在“待结算”账户的订单,如果出现退款情况,业务流程和上述流程差不多,只是从待结算账户进行扣款。

    2.2.2对账流程

    对账流程

    1)对账流程说明

    对账,我们一般称为勾兑,支付系统的对账,包含着两个层面:

    1. 支付系统内部间的对账,支付系统一般是分布式的,整个支付系统被拆分成了多个子系统,如交易系统、账户系统、会计系统、账户系统,每个子系统在处理各自的业务,系统间的对账,就是以上系统的核对,用于修正内部系统的数据不一致。

    2. 支付系统与渠道的对账,这里的渠道泛指所有为支付系统提供代收付业务的渠道,如:第三方支付公司、银行、清算中心、网联、银联等。

    2)支付系统与渠道间的对账

    系统间的对账比较好理解,这里主要讲支付系统与渠道间的对账。支付系统与渠道间的对账,又包含2个维度:

    1. 信息流勾对:即业务对账/交易对账,主要是就收单交易的支付信息与银行提供的信息流文件进行勾兑。信息流的勾地能发现支付系统与银行系统间的掉单、两边由于系统间的原因导致的同一笔交易支付金额不一致(可能性很小)或者支付状态不一致。信息流勾兑一般用来恢复掉单数据,可通过补单或者具体系统问题排查解决。

    2. 资金流勾对:即资金对账,主要就收单交易的支付信息与银行提供的资金流信息进行勾兑。资金流的勾兑能发现支付系统在银行的帐户资金实际发生的变动与应该发生的变动的差异,比如长款(银行多结算给支付系统)和短款(银行少结算给支付系统)。

    说了这么多,就出现来4个对账文件,支付系统信息流文件、支付系统资金流文件、银行信息流文件、银行资金流文件。业务对账(勾兑)就是支付系统的信息流文件与银行的信息流文件勾兑,资金对账即支付系统的资金流文件与银行的资金流文件勾兑。

    3)核对的差异处理

    1、信息流勾对的差异处理

    • 支付系统信息流没有,而银行有的差异,可能是因为支付系统交易数据的丢失、银行的掉单,如果是银行的掉单,由支付公司的运营登录银行网银确认后,做补单处理,并将差异表中该记录核销。

    • 支付系统信息流有,而银行没有的差异,此种情况一般不会发生,因为支付系统所有的交易数据都是取银行返回状态的数据。

    2、资金流勾对对差异处理

    • 支付系统资金流没有,而银行有的差异。可能原因如下:1、银行日切晚与支付系统核心账务系统;2、支付系统账务核心系统与其他系统间的掉单。一旦出现,则会出现长款(即银行不应该结算而实际结算)的现象,对于因日切导致的差异,在第二天的对账中系统会对平,其他原因的,需要技术排查。

    • 支付系统资金流有,而银行没有的差异,可能是因为银行日切早于支付系统的核心账务系统,一旦出现,会出现短款(银行应结算而实际未结算)的现象,银行日切导致段差异,会在下一天与银行的勾对中,将此笔差异勾对上,如果是非日切导致的原因,就需要找银行追款了。

    总结就是,业务对账,即信息流对账,支付系统的交易流水与银行的交易流水间核对,保障支付交易完整入账。资金对账,即资金流对账,支付系统的入账流水与银行的结算流水间核对,保障银行入账流水与实际入账资金的匹配。

    2.2.3结算流程

    结算流程

     

    在清结算部分,系统按照设定好的清结算规则自动将钱款结算给商户。完善的运营会计体系帮助财务进行精细化核算,提高财务效率。与支付渠道自动进行对账,确保账务正确,在异常情况下能及时定位问题并处理。系统更是能对商户进行个性化的费率配置或账期配置,方便灵活。系统的价值不仅体现在支付清结算方面,同时更是提升了运营管理效率。支付清结算系统可以有效帮助运营、财务、开发以及管理人员。对于运营人员,系统可帮助处理平台的运营工作,包括各类支付管理,商户、会员管理,营销活动的数据统计等,全面提高运营效率。针对财务人员,可以协助完成资金对账、会计处理,出入款管理,账务差错处理等,大部分工作由系统自动处理,减少人工处理,提高资金处理效率。一套灵活便捷的配置后台供开发人员快速调整系统以适应新的业务,并能方便对系统进行维护,如渠道接入、费率配置、账期调整等,提高开发效率。系统提供资金流转过程中各个环节的数据,能够从各个维度进行核算和分析,形成对管理人员的决策支持,从而提高决策效率。

    2.3关键表设计

    关键表设计

     

    2.4支付系统要点

    在支付系统中,支付网关和支付渠道的对接是最繁琐重要的功能之一,其中支付网关是对外提供服务的接口,所有需要渠道支持的资金操作都需要通过网关分发到对应的渠道模块上。一旦定型,后续就很少,也很难调整。而支付渠道模块是接收网关的请求,调用渠道接口执行真正的资金操作。每个渠道的接口,传输方式都不尽相同,所以在这里,支付网关相对于支付渠道模块的作用,类似设计模式中的wrapper,封装各个渠道的差异,对网关呈现统一的接口。而网关的功能是为业务提供通用接口,一些和渠道交互的公共操作,也会放置到网关中。

    支付系统对其他系统,特别是交易系统,提供的支付服务包括签约,支付,退款,充值,转帐,解约等。有些地方还会额外提供签约并支付的接口,用于支持在支付过程中绑卡。 每个服务实现的流程也是基本类似,包括下单,取消订单,退单,查单等操作。每个操作实现,都包括参数校验,支付路由,生成订单,风险评估,调用渠道服务,更新订单和发送消息这7步,对于一些比较复杂的渠道服务,还会涉及到异步同通知处理的步骤。

    1、网关前置

    支付网关前置是对接业务系统,为其提供支付服务的模块。它是所有支付服务接口的集成前置,将不同支付渠道提供的接口通过统一的方式呈现给业务方。这样接入方就只需要对接支付网关,增加和调整支付渠道对业务方是透明的。 支付网关前置的设计对整个支付系统的稳定性、功能、性能以及其他非功能性需求有着直接的影响。

    在支付网关中需要完成大量的操作,为了保证性能,这些操作都尽量异步化来处理。支付网关前置应保持稳定,尽量减少系统重启等操作对业务方的影响。支付网关也避免不了升级和重启。这可通过基于Nginx的LBS(Load Balance System)网关来解决。LBS在这里有两个作用: 一个是实现负载均衡,一个是隔离支付网关重启对调用的影响。 支付网关也采用多台机器分布式部署,重启时,每个服务器逐个启动。某台服务器重启时,首先从LBS系统中取消注册,重启完成后,再重新注册到LBS上。这个过程对调用方是无感知的。

    为了避免接口受攻击,在安全上,还得要求业务方通过HTTPS来访问接口,并提供防篡改机制。防篡改则通过接口参数签名来处理。现在主流的签名是对接口参数按照参数名称排序后,做加密和散列,参考微信的签名规范。

    2、参数校验

    • 所有的支付操作,都需要对输入执行参数校验,避免接口受到攻击。

    • 验证输入参数中各字段的有效性验证,比如用户ID,商户ID,价格,返回地址等参数。

    • 验证账户状态。交易主体、交易对手等账户的状态是处于可交易的状态。

    • 验证订单:如果涉及到预单,还需要验证订单号的有效性,订单状态是未支付。为了避免用户缓存某个URL地址,还需要校验下单时间和支付时间是否超过预定的间隔。

    • 验证签名。签名也是为了防止支付接口被伪造。 一般签名是使用分发给商户的key来对输入参数拼接成的字符串做MD5 Hash或者RSA加密,然后作为一个参数随其他参数一起提交到服务器端。

    3、路由选择

    根据用户选择的支付方式确定用来完成该操作的合适的支付渠道。用户指定的支付方式不一定是最终的执行支付的渠道。比如用户选择通过工行信用卡来执行支付,但是我们没有实现和工行的对接,而是可以通过第三方支付,比如支付宝、微信支付、易宝支付,或者银联来完成。那如何选择合适的支付渠道,就通过支付路由来实现。支付路由会综合考虑收费、渠道的可用性等因素来选择最优方案

    4、风险评估

    检查本次交易是否有风险。风控接口返回三种结果:阻断交易、增强验证和放行交易。

    • 阻断交易,说明该交易是高风险的,需要终止,不执行第5个步骤;

    • 增强验证,说明该交易有一定的风险,需要确认下是不是用户本人在操作。这可以通过发送短信验证码或者其他可以验证用户身份的方式来做校验,验证通过后,可以继续执行该交易。

    • 放行交易,即本次交易是安全的,可以继续往下走。

    5、发送消息

    通过消息来通知相关系统关于订单的变更。风控,信用BI等,都需要依赖这数据做准实时计算。

    6、更新订单

    对于同步返回的结果,需要在主线程中更新订单的状态,标记是支付成功还是失败。对于异步返回的渠道,需要在异步程序中处理。

    7、异步通知

    其中涉及到调用远程接口,其延迟不可控。如果调用方一直阻塞等待,很容易超时。引入异步通知机制,可以让调用方在主线程中尽快返回,通过异步线程来得到支付结果。对于通过异步来获取支付结果的渠道接口,也需要对应的在异步通知中将结果返回给调用方。 异步通知需要调用方提供一个回调地址,一般以http或者https的方式。这就有技术风险,如果调用失败,还需要重试。而重试不能过于频繁,需要逐步拉大每一次重试的时间间隔。 在异步处理程序中,订单根据处理结果变更状态后,也要发消息通知相关系统。

    8、生成交易订单

    将订单信息持久化到数据库中。当访问压力大的时候,数据库写入会成为一个瓶颈。

    9、交易流水和记账

    每一笔交易都需要记录流水,并登记到个人和机构的分户账户上,统计和分析也需要根据交易流水来更新相关数据。 而个人和机构账户总额更新、交易流水记录以及库存的处理,更是需要事务处理机制的支持。 从性能角度, 可以弱化了事务处理的要求,采用消息机制来异步化和交易相关的数据处理。

    • 在支付网关前置的主流程中,仅记录交易流水,即将当前的请求保存到数据库中。

    • 完成数据记录后,发送MQ出来,记账、统计、分析,都是接收MQ来完成数据处理。

    • 涉及到本地资金支付,比如钱包支付,会需要分布式事务处理,扣减账号余额,记账,扣减库存等,每个操作失败,都要回滚。阿里有很不错的分享,这里不详细描述。

    • 当交易量上来后,需要考虑交易表的分表分库的事情。分表分库有两个策略,按照流水号或者交易主体id来走。后者可以支持按用户来获取交易记录。我们用的是前者。后者可以走elastic,确保数据库专用。风控,信用和统计所需要的数据,通过MQ同步到历史库里面。作为支付系统最有价值的数据,在存储上做到专库专用,无可厚非,毕竟存储成本还是廉价的。

    10、支付路由

    支付路由是一个复杂的话题。对支付系统来说,能支持的支付方式越多越好,不能由于支付方式的不支持断了财路。现实中的支付方式多得难以置信。用户随时甩出一张你听都没听说过的卡。如果一个银行卡只有几个用户在用,那针对这个卡开发个对接有点得不尝失。现在第三方支付的爆发,确实给开发支付系统省了不少事。但是公司不可能只对接一个第三方支付,如果这个渠道出问题了,或者闹矛盾了,把链接给掐了,老板还不欲哭无泪。总之,得对接多个渠道。对于交易量大的银行,还得考虑直联。

    11、渠道接入

    对于支付渠道,首先考虑的是接入哪些渠道。要对接的渠道按优先级有:

    • 第三方支付,对大部分应用来说,支付宝和微信支付都是必须的,一般来说,这两者可以占到90%以上的交易量。用户不需要绑卡,授权后直接支付就行。各种平台都支持,性能和稳定性都不错。对于一些特殊业务,比如游戏,企业支付,可以查看一些专用的第三方支付平台。

    • 银联,它的存在,极大方便了和银行的对接。和第三方支付主要不同在两个地方一是需要绑卡,也就是用户先把卡号,手机,身份证号提供出来。这一步会折损不少用户。绑卡后,以后的支付操作就简单了,用户只需要输入密码就行。手机客户端不需要像第三方支付那样安装SDK,都在服务器端完成。当然,这是针对快捷支付。网银支付还是挺麻烦的。银联接入也需要ADSS认证。

    • 银行:2018年2月9日银监会公布了最新权威数字:一共【4549家】开发性金融机构1家:国家开发银行;政策性银行2家:进出口银行、农业发展银行;5大国有银行:工、建、农、中、交;邮储银行1家;全国性股份制商业银行12家:招行、中信、兴业、民生、浦发、光大、广发、华夏、平安、浙商、渤海、恒丰;金融资产管理公司4家:信达、华融、长城、东方四大AMC;城商行134家;住房储蓄银行1家;民营银行17家,如网商银行;农商行1262家;农村合作银行33家;农村信用社965家;村镇银行1562家;贷款公司13家;农村资金互助社48家;外资法人银行39家;信托公司68家;金融租赁公司69家;企业集团财务公司247家;汽车金融公司25家;消费金融公司22家;货币经纪公司5家;其他金融机构14家。一般对接一个银行预计有3周左右的工作量,大部分银行需要专线接入,费用和带宽有关,一年也得几万费用。不同银行对接入环境有不同要求,这也是成本。

    • 手机支付:比如苹果的In-App支付, 三星支付、华为支付等, 这些支付仅针对特定的手机型号, 支持NFC等,根据业务需要也可以接入。

    三、总结

    支付系统是一个繁杂的系统,其中涉及了各种错综复杂的业务流程,以上只是简单介绍了支付系统我们能看见的一些问题和设计,还有后续的系统保障没有写出来,没写出来的才是关键部分,比如:支付系统监控(业务监控分类、渠道监控、商户监控、账户监控)文章只是引子, 架构不是静态的,而是动态演化的。只有能够不断应对环境变化的系统,才是有生命力的系统。所以即使你掌握了以上所有的业务细节,仍然需要演化式思维,在设计的同时,借助反馈和进化的力量推动架构的持续演进。

     

    转自公众号“技术方舟”,原创:李伟山

    展开全文
  • 支付系统总结

    2018-01-30 19:44:32
    支付系统的总体框架 大额实时支付系统 支付系统运行控制 支付系统业务标准 清算账户管理系统 人民银行内部转账业务 同城轧差净额业务 行名行号管理 日间透支计息和支付业务计费 支付系统与相关系统的接口 支付业务...
  • 支付系统设计 论文

    2017-11-17 16:47:23
    支付系统设计支付系统设计支付系统设计支付系统设计支付系统设计支付系统设计
  • 支付系统-对账系统

    万次阅读 多人点赞 2019-04-08 14:17:04
    支付系统中,资金对账在对账中心进行,将系统保存的账务流水与银行返回的清算流水和清算文件进行对账,核对系统账务数据与银行清算数据的一致性,保证支付机构各备付金银行账户每日的预计发生额与实际发生额一致。...

           在支付系统中,资金对账在对账中心进行,将系统保存的账务流水银行返回的清算流水和清算文件进行对账,核对系统账务数据与银行清算数据的一致性,保证支付机构各备付金银行账户每日的预计发生额与实际发生额一致。

    一、清算对账系统

           支付公司提供的所有金融服务是建立在银行资金体系之上的,支付公司账务系统内账户的资金都与其在银行的存款资金一一对应,为了保证真实的资金账户和虚拟账户的资金转换正确,支付公司必须及时与银行进行各类业务的资金核对,所有资金核对都依赖于银行的系统。

    1.1、资金流入与银行的对账

           从银行流入的资金是由银行侧控制资金结转清算与对账时间,即每日客户通过银行向支付机构充值的资金是由银行实时通知支付机构充值指令的发生,银行在每日晚间经过汇总后向支付机构的银行收款账户入账,同时提供入账清算文件。支付机构获取该文件后,与业务数据进行核对。

           对账结果若相符,则没有问题。若出现对账结果不符,很有可能是系统或者业务在某些环节发生问题,存在两种情况:

    (1)、银行充值明细多,支付机构充值明细少;即银行向支付机构入账资金多于支付机构业务发生情况,一般采取临时挂账处理,查出原因后再具体解决;
    (2)、银行充值明细少,支付充值明细多;即银行向支付机构入账资金少于支付机构业务发生情况,则可能对支付机构产生资金损失,一般采取临时挂账处理,查出原因后再具体解决。

    1.2、资金流出与银行的对账

           从支付公司流出的资金是由银行侧控制资金结转清算与对账时间,即每日客户向支付机构申请提现的资金是在每日支付公司批量向银行发起提现请求时,从支付公司银行存款账户扣转,但扣转的结果一般需要一段时间才能从银行侧得到反馈。

           当银行侧提供扣转成功和失败的清算文件,支付公司获取这些文件进行明细核对,对于提现失败的申请,由支付公司后台发起直接将资金回充入客户账户,不在对账中心进行对账处理

    二、什么是对账

    2.1、什么是资金对账

    在会计上的概念:指为了保证账簿记录的正确性而进行的有关账项的核对工作,做到账实相符(正确性)、账证相符(真实性)、账账相符
    在支付机构的概念:资金对账在对账中心进行,将系统保存的账务流水与银行返回的清算流水和清算文件进行对账,核对系统账务数据与银行清算数据的一致性,保证支付机构各备付金银行账户每日的预计发生额与实际发生额一致。即核对银行实际清算资金如充值、充退、提现等业务的银行处理结果是否一致

    2.2、对账中心的作用

           对账中心是主要处理对账的系统模块,主要业务是清算对账。对账中心部署于工作平台,分别接受会计系统和清算系统的数据输入进行对账处理。

           对账中心最主要的职责是勾兑银行清算流水与支付系统入账流水,用以检查反映银存实际账户的余额变化支付系统内部户余额变化是否平衡。对于已经核对无误的银行清算流水和支付系统入账流水,分别进入相应的历史银行流水库历史入账流水库

           对于勾兑结果中银行清算流水多于系统入账流水的,而操作人员不明确资金的来源,需要根据所设定的分类规则将暂不明确的资金进行挂账处理。而后我们认为该部分资金已经系统入账,可以入历史流水库。
           因为此时的银存实际账户的余额增加,与之对应的是支付系统内部户余额也增加了,比如: T 日的挂账可能会在 T+N 日后进行销账确认,而后续的销账行为是对明细流水的业务分流处理,我们不应将 T+N 日的销账所产生的账务流水作为入账流水,不再需要到对账中心体现。

    三、对账内容和数据来源

    第一步:入账流水和清算流水进行核对,目的是保证对每一笔订单银行的处理结果和我们系统的业务处理结果一致。
    第二步:对账汇总确认单和银行对账单进行核对,目的是通过轧余额等方式核对各类业务的银行处理结果是否与银行实际清算给我们的资金一致。

    3.1、对账业务流程

    对账业务流程图


    3.2、对账中心主要功能

           银行发生资金变动的入账流水,包括:充值、提现、提现失败、充退、充退失败、退票、购汇、信贷放款、信贷还款、还贷失败一系列业务引起的账务变动信息。这些业务流水在账务系统入账后,会计核心接收到登记分录请求并处理完毕,发送该流水至对账中心,对账中心对于某个业务的反向资金变动所产生入账流水也同步至对账中心。
            这样做的目的是让待清算与入账流水在日切点保持等额,比如:提现 T 日会员申请提现,生成文件后会员账户提现金额转入待清算提现款项,与此同时发送流水到对账中心,此时待清算与对账中心入账流水是保持平衡的。
    而 T+1 日银行处理失败,系统会回充带清算提现款,如果此时不发送失败流水到对账中心与其对应的流水进行购销的话,则入账流水就会不变,和带清算提现不平衡。

    (1)、完整的日结流程支持:银行清算流水入库 → 流水对账 → 流水分类 → 汇总确认单 → 自动挂账 → 销账确认 → 操作员轧账 → 总账日结以及登记银行余额等。
    (2)、完善的报表模型输出:如按入账日期 / 银行日期 / 清算日期等的统计报表、银行账户余额报表、未达款项报表等;
    (3)、提供日切服务:在经确认后进入历史清算流水的,同步汇总该部分数据进入历史流水汇总表中保存,所以在日切时,只需直接将该汇总数据再次汇总即可。
    (4)、外围业务功能支持:提供对于银行账户( 独立于对账中心之外,不参与处理逻辑 )的管理功能,支持与内部户的映射管理,用以满足部分报表需求;提供基于账务核心所提供的业务代码查询功能;提供对于财务系统的交互支持,包括与财务科目的对应关系管理、通知流水数据等;提供用以校验订单与清算流水匹配状态的错账核实功能。

    对账流程图

    四、对账中心功能模块分析

    4.1、获取资金对账数据

    (1)、获取方式:需要进行清算流水导入的文件一般通过人工在页面上导入,另外有些业务的流水文件通过系统自动匹配或者定时获取的方式得到。
    (2)、清算流水导入渠道:需要统一各清算流水导入功能到一个页面入口, 同时引入清算通道对账的逻辑,将清算流水导入过程需要映射清算通道( 包含新增清算流水等 )。
    (3)、各类业务的清算流水文件的解析和导入逻辑不一样。

    4.2、清算流水对账

    4.3、对账逻辑

    (1)、一对一对账

           入账流水只可能存在一条,银行入账流水也仅存在一条,然后一对一去对。目前按照一对一对账的业务涉及到:网银 B2C 充值、网银 B2B 充值、VISA、网汇E、卡通充值、正常提现、认证提现、银企互联提现、卡通提现、卖家信贷、信用卡还款提现、COD、网点支付。

    对账标准(清算通道 + 订单号 + 金额) Or (银行名称 + 业务代码 + 订单号 + 金额)

    满足一对一的业务如下:

    提现成功:500401
    认证提现:500402
    还贷:500404
    卡通提现:500403
    个人网银充值:400301
    企业网银充值:400302
    VISA:400314
    网汇e:400315
    卡通充值:400304
    贷款:400307
    银企互联提现:500405
    信用卡还款提现:500407
    后台强制提现500406
    COD
    网点支付

    Tips:
    (1)、清算流水有,入账流水也有,金额一致,对账成功,清算流水、对账流水打上 ‘对账成功’ 标志,记录对账日期为系统当日;
    (2)、清算流水有,入账流水也有,金额不一致,清算流水记金额不等,记录对账日期为系统当日,入账流水不变;
    (3)、清算流水有,入账流水该订单号没有,清算流水打上 ‘银行多帐’ 的标志,记录对账日期为系统当日;
    (4)、清算流水有,入账流水没有该业务代码初始状态的,清算流水打上 ‘银行多帐’ 的标志,记录对账日期为系统当日;
    (5)、清算流水有,入账流水没有该银行的初始状态的记录,清算流水打上 ‘银行多帐’ 的标志,记录对账日期为系统当日;
    (6)、对账之前需要判断 1 对 1 的流水中是否有重复,有重复的返回失败不进行后续对账

    (2)、多对多对账

           入账流水里相同订单号,相同清算渠道,相同,金额相同业务代码的流水存在对条(比如充退);而银行清算流水也可能是存在多条的情况的,这种情况下是多对多去对账的,遵循先到的先对的原则。

    对账标准:(清算通道 + 订单号 + 金额) Or (银行名称 + 业务代码 + 订单号 + 金额)

    满足多对多的业务如下:

    充退:410401
    银企互联充退:410402
    Motopay 充退:410403

    Tips:
    (1)、清算流水有,入账流水有,满足对账标准,则对账成功,清算流水、对账流水打上 ‘对账成功’ 标志,记录对账日期为系统当日;
    (2)、清算流水有,入账流水有,金额不等,清算流水打上 ‘金额不等’ 的标志,记录对账日期为系统当日,入账流水不变;
    (3)、清算流水有,入账流水没有该订单号,清算流水打上‘银行多帐’ 的标志,记录对账日期为系统当日;
    (4)、清算流水有,入账流水没有初始状态 410401 的流水,清算流水打上 ‘银行多帐’ 的标志,记录对账日期为系统当日;
    (5)、清算流水有,入账流水没有这个银行初始状态 410401 的流水,清算流水打上 ‘银行多帐’ 的标志,记录对账日期为系统当日;
    (6)、清算流水有,入账流水没有初始状态的 ‘410401’ 的流水,清算流水打上 ‘银行多帐’ 的标志,记录对账日期为系统当日。

    (3)、一对多对账

           入账流水有多条,和银行的一条去对账。
    对账标准(清算通道 + 订单号 + 金额) Or (银行名称 + 业务代码 + 订单号 + 金额)

    涉及的业务:境外收单

    境外收单购汇扣款(520101)
    购汇益回补购汇账户(400319)

    Tips:
    (1)、入账流水存在 2 条 520101 的,清算流水存在 1 条 520101 的,将入账流水的 2 条加和后的金额和清算流水的进行对账,一致的为对账成功;
    (1)、入账流水存在 1 条 520101 的,1 条 400319 的,那么要将 2 条金额之差和清算流水的 1 条 520101 的进行对账。不会出现 3 条 520101 或者 2 条 400319 的情况。

    4.4、对账功能

    (1)、内部流水购销

           内部流水购销是针对那种有入账流水表来说的,比如提现业务,提现文件生成就会扣款此时会同步一笔入账流水;而回导失败之后又会回充,此时也会同步一笔反向的业务流水,这两条流水不用再去和银行的资金流水进行对账,直接在入账流水这边进行购销即可。
    需要购销的业务如下:


    (1)、购销的规则:非已勾销状态下,同一银行同一订单号,金额一致而业务代码相反的正向流水进行勾销,而且一条反向流水只勾销一条;
    (2)、日终轧账时候的购销:日终轧账的时候会对未购销的流水再次进行购销确保当天的流水都购销完全。(这个情况是为了解决反向流水先于正向流水先出现的逻辑错误情况而加的并提示流水号);
    (3)、如果业务代码相反,而金额不等的情况,就无法进行购销,这种情况原来是作为违反逻辑规则来进行标记的。这部分数据进行查明之后,可以修改流水之后,在日终轧账的时候从新进行购销;
    (4)、购销分 ‘一对一’(提现)和 ‘多对多’ (充退)的购销;
    (5)、勾销的流水不入历史库。

    (2)、对账汇总确认单

           显示对账结果,选择后续的相应的处理界面,复核员在此模块进行流水的确认,还有的功能就是对于已经对账处理的银行清算流水与系统入账流水进行后续业务分流推进。

    (1)、对于大部分对账成功的数据,可以将这些流水确认,确认后该部分流水将进入历史清算流水,只有进入历史清算流水的才认为银行与支付系统数据对平。对账成功的银行清算流水、账务入账流水全部进入各自历史清算流水表保存,相应的银行清算流水与入账流水同步删除。
    (2)、金额不等的流水,可能是银行清算流水文件有误,也可能是错账,采取的做法是操作员手工修改金额,在银行清算流水管理里操作或直接删除,将其推进到下一轮的对账处理环节,对账是可以重复对的,只要满足初始状态要求的流水即可。
    (3)、多账部分,由于各种已明确/未明确的原因,银行已经实际清算给支付公司了,但支付公司的账务系统并没有入账,需要提供一个流水分类和分类汇总挂账的操作入口。系统默认多账的流水给出的菜单是流水分类,金额不等的流水给出的流水管理页面。区别在于,在点流水分类时,只允许修改业务类型、银行日期,而且改完后不改变多账状态;流水管理,修改状态后,流水的对账状态将变成初始状态,需要进行重新对账。
    (4)、流水进入历史库的校验规则。

           举例说明:A 操作员导入了一笔流水,系统对账成功,银行清算流水与账务入账流水状态都被置为成功状态;B 操作员再次导入该相同流水,由于入账流水处于成功状态的可以继续对账,所以再次对账成功。系统在对账环节认为正常,但在入历史清算流水时必须做每组流水数据的平衡检查:必须是清算流水总额与入账流水总额匹配才可以进历史数据。
           对于上述的场景,如复核员针对 B 操作员的对账成功流水确认后,可以正常进入历史流水,对账批次号认最后操作的批次。而继续对 A 操作员的成功对账流水确认,则系统将认为是不合法的入历史流水行为。或者不对特定操作员的汇总确认,系统必须检验出所存在的重复银行清算流水,并将对应的明细数据显示复核员。此时可将该重复对账的清算流水删除即可。

    (3)、流水分类和分类汇总挂账

    (1)、对于多账的流水对账中心提供一个单独的处理入口,首先在此处进行分类,然后进行汇总挂账处理。操作人员可以根据多账流水的未确认类型修改成对应的业务代码,允许修改成业务类型为 7 的可挂账的类型(其他业务代码不允许挂账);流水可以重复分类,系统不做控制;但已申请挂账的除外,分类完毕的多账流水可直接提供分类汇总挂账操作。
    (2)、系统根据既定的业务代码判断是待查收入或待查支出挂账,页面跳转至相关凭证登记页面,此处业务规则同待查收支挂账;另一部分比如退票,因为不经过对账环节,所以需要直接在清算流水查询里面新增,业务代码 700106 未确认退票,不需要经过对账,直接去汇总确认单里将流水挂账。允许挂账的业务代码如下 :700101 其他应付款,700102 其他应收款,700103 银行错账,700104 未确认结汇款,700105 线下汇款,700106 未确认退票,700107 未确认收款,700108 未确认支出款。
    (3)、提交凭证登记申请相关校验:流水此刻状态是否是 ‘多帐’ ,申请提交人是否是当时的对账人,凭证登记成功,清算流水记录凭证号,流水状态改为 ‘已挂账’ ;
    (4)、汇总挂账的反交易同步入账流水,金额是负值,系统在清算流水里在做一条数据,自动对账。

    (4)、清算/入账/历史流水管理

    清算流水管理

    对于所有的清算流水,都可以在此模块下进行查询、修改、删除,同时也可以新增流水。

    (1)、查询功能,银行名称、业务代码、银行日期不能为空,业务代码和银行可以多选。
    (2)、修改功能,处于未对账(初始)、金额不等、多账、对账成功状态的流水可以进行单笔、批量修改操作,这里的批量修改动作与流水分类功能类似,只是该功能入口不仅支持对批量流水的业务代码、银行日期更新,也支持其他要素信息批量修改,作为(3)、提供给操作员在未对账前批量修改已知流水的手段之一;对已挂账的流水,不允许更新。
    流水删除:处于未对账(初始)、金额不等、多账、对账成功状态的流水可以进行单笔、批量删除操作,已挂账状态不允许删除。

    入账流水管理

    入账流水管理功能提供对账务入账流水的查询以及下载功能;为了杜绝对入账流水的人为变更操作,禁止支持对入账流水进行修改或删除处理

    (1)、查询时银行名称、业务代码、入账日期不能为空,业务系统流水号:针对某类业务的业务流水号,如充值业务就是充值流水号;账务流水号:账务处理的流水号,即账务操作记录数据的序号,在账户明细查询里可以获取。
    (2)、对于提现类失败回充的流水,在操作员进行对账动作后,系统自动进行购销,在入账流水查询时,将对账状态选为已购销可以查到,这些不进入历史库,根据数据量,系统定时清理这些数据。

    历史流水管理

           分为历史入账流水和历史清算流水,查询功能在同一页面,查询时可以一起查询,也可以单独查询。历史流水只供查询和下载,不允许进行修改和删除操作。选择历史银行流水和历史清算流水(清算日期的时间间隔不能超过 7 天)进行查询,历史入账流水中无银行日期,历史银行流水中无入账日期。

    (5)、银行余额录入功能

           在该模块下,实现对每个银行账户的实际余额录入,以此来和内部账户余额进行匹配校验。分为银行余额登记,银行余额导入(复核),以及银行余额查询功能。

    (1)、银行余额登记:选择对应日期以及银行账户录入后,保存,此时去银行余额查询是看不到录入余额的,需要复核导入核对完毕后才能看到,保证核对的有效性。登记后系统记录一个临时余额。系统每天凌晨 1:15 的时候会跑批,取上一日已复核过的余额自动带入下日临时余额,如果不登记的话,就取上日余额。
    (2)、银行余额导入:标准格式是一个填写银行余额的 excle 模板,导入后的核对逻辑,对复核员导入的数据进行检测该帐户是否有临时余额。根据银行账号、银行日期、银行余额等条件查询银行余额表。
           判断 1 :如果查询出结果为空那么将返回给用户:“这个银行帐号找不到对应的银行临时余额!”。
           判断 2 :如果查询结果大余一条,将返回给用户:“这个银行帐号的一天有多个银行临时余额,不正常!”
           判断 3 :检测该银行帐号对应的银行余额是否相等。如果不相等将返回给用户:“临时余额和实际余额不相等,核对失败!”当余额核对成功后,将复核员导入的余额写入该对应帐户的实际余额,并修改余额状态为已复核。实际余额更新成功后,将删除当天日期的临时余额。
    (3)、银行余额查询:对操作员登记余额的信息,以及复核员复核过的余额进行查询,查询条件:银行名称、银行帐户、帐户状态、银行日期、余额状态。帐户状态:分为正常、废除、和销户三个状态,默认为正常状态。余额状态:分为未录入(N)、已录入(A)、已复核(Y)三个状态,默认为全部。

    (6)、内部账户登账

           业务简述:针对日常结算工作中非银行待查类的内部账户进行登记,如:清算款、利息、手续费等;该业务登记不产生后续业务登记行为,即不具有作为初始凭证号的使用功能。对于批量销帐类业务处理中,多会员转帐失败的,导致过渡户上有剩余金额情况的,可通过此处进行内部户登账,将过渡户(负债)和银存(资产)余额同时减少,再通过待查收入挂帐实现平衡。

    业务校验规则:

    (1)、必须登记的是一借一贷帐户信息;
    (2)、借贷方帐户不能一致;
    (3)、金额必须大于 0 ;
    (4)、不允许任意一方是销帐帐户。

    是否同步对帐中心流水:不需要同步对帐中心流水

    (7)、待查收入挂账

           业务简述:应用于结算操作员针对日常结算工作中的银行待查收入进行登记,所产生的业务凭证号作为后续销帐业务的原业务凭证号,并且作为所有该登记所引发的后续业务登记的初始凭证号。其中待查收入挂帐业务凭证的借方(银存帐户)所对应的银行名称作为后续销帐业务的银行名称,包括差额重新挂帐部分再销帐的业务凭证,都递沿该银行名称。

    业务校验规则:

    (1)、必须登记的是一借一贷帐户信息;
    (2)、借贷方帐户不能一致;
    (3)、金额必须大于 0 ;
    (4)、借方帐户必须是银存帐户;
    (5)、贷方帐户必须是销帐帐户。

    是否同步对帐中心流水:不需要同步对帐中心流水

    (8)、待查收入确认

           业务简述:针对银行待查收入登账的挂帐,可以通过本模块进行销帐。此处采取销帐确认方式进行处理,需要选择相应的待查收入挂帐业务凭证进行销帐业务登记。该业务登记可能产生后续业务登记行为,如差额销帐情况下,系统会自动做不足额部分的重新挂帐并复核通过,所产生的挂帐凭证作为后续销帐凭证的销帐卡片号。

    业务校验规则:

    (1)、所销的原待查收入挂帐凭证必须合法;
    (2)、所销的原待查收入挂帐凭证必须已复核通过,处理完毕;
    (3)、所销的原待查收入挂帐凭证不能已被销帐;
    (4)、销帐总额(贷方发生额之和不得大于原待查收入挂帐凭证发生额)并大于 0 ;
    (5)、贷方必须是内部户。

    (9)、待查支出挂账

          业务简述:针对日常结算工作中的银行待查支出进行登记,所产生的业务凭证号作为后续销帐业务的原业务凭证号,并且作为所有该登记所引发的后续业务登记的初始凭证号。其中待查收入挂帐业务凭证的贷方( 银存帐户)所对应的银行名称作为后续销帐业务的银行名称,包括差额重新挂帐部分再销帐的业务凭证,都递沿该银行名称。

    业务校验规则:

    (1)、必须登记的是一借一贷帐户信息;
    (2)、借贷方帐户不能一致;
    (3)、金额必须大于 0 ;
    (4)、贷方帐户必须是银存帐户;
    (5)、借方帐户必须是销帐帐户 。

    是否同步对帐中心流水:不需要同步对帐中心流水

    (10)、待查支出确认

           业务简述:针对银行待查支出登账的挂帐,可以通过本模块进行销帐。此处采取销帐确认方式进行处理,需要选择相应的待查支出挂帐业务凭证进行销帐业务登记。该业务登记可能产生后续业务登记行为,如差额销帐情况下系统会自动做不足额部分的重新挂帐并复核通过,所产生的挂帐凭证作为后续销帐凭证的销帐卡片号。

    业务校验规则:

    (1)、所销的原待查支出挂帐凭证必须合法;
    (2)、所销的原待查支出挂帐凭证必须已复核通过,处理完毕;
    (3)、所销的原待查支出挂帐凭证不能已被销帐;
    (4)、销帐总额(借方发生额之和不得大于原待查收入挂帐凭证发生额)并大于0 ;
    (5)、借方必须是内部户。

    五、意外数据恢复逻辑

    5.1、意外数据恢复逻辑

    (1)、重复支付:对同一内部订单号进行了二次或二次以上的支付。
    (2)、支付失败,金额不等:买家实际支付的金额与交易金额不等。一般产生的原因是,买家在支付时,产生了掉单,卖家随后修改了交易价格。 在进行网银对账的时候,即会出现订单金额和交易金额不等的情况,且是一笔掉单。2、3 两类情况只发生在支付上。
    (3)、支付成功,金额不等:商户订单状态为成功,后台订单状态也为成功,并且交易状态是买家已付款,等待卖家发货。

           金额不等,支付成功:是因为会员对一个交易进行支付,但由于网络或银行系统等原因支付公司未接收到银行扣款信息,支付侧交易状态未予以变更,后卖家对该交易修改了价格,买家又对该修改过的价格进行了支付。但该支付成功的信息仍然没有被支付侧接收到,该交易状态仍未变更,后支付侧后台人员先对后面的那笔意外数据进行了恢复,后再对前面那笔意外数据恢复,就会出现这种“金额不等,支付成功”的数据

    5.2、对帐及异常恢复逻辑

    (1)、以商户成功订单为准

    用商户上的成功订单与后台的订单来核对:

    (1)、若商户订单为成功,后台为初始或者失败,则更改后台状态为成功;
    (2)、若后台为成功,商户成功订单中无该订单(时间差),则不更改后台状态;
    (3)、若后台为初始或失败,商户成功订单中无该订单,则不更改后台状态。

    (2)、不重复恢复

           T+1 日恢复T 日的订单,并且在 T+1 日后不再下载 T 日的订单进行二次或多次恢复。(为考虑会员感受,T 日下班前恢复 T 日 0 点到下班时点的订单)

    (3)、时间性差异

            由于各家银行系统日切点均不同,并且大多不会在每日的 24 点(或早或晚),所以下载到的 T 日的订单流水与后台T日( 0:00-24:00 )的订单流水并不能全部对应上。将商户订单流水与后台订单流水核对,会出现商户有,后台无商户无,后台有商户有,后台有三种情况。对于 1、2 两种情况为我们所说的时间性差异。

    商户数据与后台数据的关系为:商户数据-(商户有,后台无)+(商户无,后台有)= 后台数据

    展开全文
  • 网络支付系统

    热门讨论 2012-04-01 16:10:59
    网络支付系统,直接调用4大银行的网银进行支付,具有很高的学习价值
  • 支付系统设计

    千次阅读 2019-03-18 19:00:23
    支付系统 概述 支付系统是连接消费者、商家(或平台)和金融机构的桥梁,管理支付数据,调用第三方支付平台接口,记录支付信息(对应订单号,支付金额等),金额对账等功能,根据不同公司对于支付业务的定位不同大概...

    支付系统

    概述
    支付系统是连接消费者、商家(或平台)和金融机构的桥梁,管理支付数据,调用第三方支付平台接口,记录支付信息(对应订单号,支付金额等),金额对账等功能,根据不同公司对于支付业务的定位不同大概有几个阶段:第一阶段:支付作为一个(封闭)的、独立的应用系统,为各系统提供支付功能支持。一般来说,这个系统仅限于为公司内部的业务提供支付支持,并且和业务紧密耦合。第二阶段:支付作为一个开发的系统,为公司内外部系统、各种业务提供支付服务,支付服务本身应该是和具体的业务解耦合。

      支付是电商系统中核心
    

    在这里插入图片描述
    我们先来看一下用户完成一次购物需要进行那些操作:
    在这里插入图片描述
    通常消费者在手机APP或者网站都会涉及到支付相关的业务场景,用户只需要简单点击支付按钮输入支付密码,就可以完成整个支付过程,那么我就和大家一起来看看一个完整的支付系统有什么功能组成和设计时需要考虑那些问题。

    01
    支付系统的作用
    在这里插入图片描述
    从上图中我们可以看出真实的资金流向。首先当用户产生支付行为时,资金从用户端流向支付系统,退款时则相反,从支付系统回流至用户端。因此在整个交易过程中用户端与支付系统是双向资金的流动方式。对于支付系统而言,资金有进有出。从支付系统到商户端就比较简单了,在清算完成后支付系统负责将代收的资金结算给商户,通常结算的操作可以在线上来完成(采用支付公司代付接口或者银企直连接口来完成),也可以由公司财务通过线下手工转账的方式来完成,因此这种资金流动的方式是单向的。出于资金安全考虑,大多数公司通常这部分采用线下方式实现。
    真实的资金流由支付公司按照约定期限(通常 T+1 )结算到平台公司对公账户中,然后再由平台公司再按照交易明细进行二次清算后结算给对应的商户。

    支付系统
    一个支付系统需要由哪些功能模块组成

    在这里插入图片描述
    01
    完整的支付系统包括如下功能:
    1.
    应用管理: 同时支持公司多个业务系统对接。
    2.

    商户管理: 支持商户入驻,商户需要向平台方提供相关的资料备案。
    3.
    渠道管理: 支持微信、支付宝、银联、京东支付等多种渠道。
    4.
    账户管理: 渠道账户管理,支持共享账户(个人商户)及自有账户。
    5.
    支付交易: 生成预支付订单、提供退款服务。
    6.
    对账管理: 实现支付系统的交易数据与第三方支付渠道交易明细的自动核对(通常T+1),确保交易数据的准确性和一致性。
    7.
    清算管理: 计算收款交易中商户的应收与支付系统收益。
    8.
    结算管理: 根据清算结果,将资金划拨至商户对应的资金帐户中。
    02
    核心流程
    支付系统有几个关键的核心流程:支付流程、对账流程、结算流程

    支付流程
    在这里插入图片描述
    支付流程说明
    1.
    用户在商城选购商品并发起支付请求;
    2.
    商城将支付订单通过B2C网关收款接口传送至支付网关;
    3.
    用户选择网银支付及银行,支付平台将订单转送至指定银行网关界面;
    4.
    用户支付完成,银行处理结果并向平台返回处理结果;
    5.
    支付平台接收处理结果,落地处理并向商户返回结果;
    6.
    商城接收到支付公司返回结果,落地处理(更改订单状态)并通知用户。
    7.
    一般而言支付系统会给商户设置有“可用余额”账户、“待结算”账户;系统在接收到银行返回支付成功信息会进行落地处理,一方面更改对应订单状态,另一方面在商户待结算账户记入一笔金额;该笔金额,系统会根据结算周期从待结算账户—>“可用余额”账户。
    退款流程说明
    1.
    用户在商户平台发起退款申请,商户核实退款信息及申请;
    2.
    3.
    商户登录支付平台账户/或者通过支付公司提供的退款接口向支付平台发起退款;
    4.
    5.
    支付系统会对退款信息校验(退款订单对应的原订单是否支付成功?退款金额是否少于等于原订单金额?),校验商户账户余额是否充足等;校验不通过,则无法退款;
    6.
    7.
    支付系统在商户可用余额账户扣除金额,并将退款订单发送至银行,银行完成退款操作。注意:对于网关收款的订单退款,各银行要求不一,有些银行提供的退款接口要求原订单有效期在90或180天,有些银行不提供退款接口;针对超期或者不支持接口退款的订单,支付公司通过代付通道完成退款操作。
    8.
    对于收单金额未结算,还在“待结算”账户的订单,如果出现退款情况,业务流程和上述流程差不多,只是从待结算账户进行扣款。
    对账流程
    在这里插入图片描述
    说明
    对账,我们一般称为勾兑,支付系统的对账,包含着两个层面:
    1.
    支付系统内部间的对账,支付系统一般是分布式的,整个支付系统被拆分成了多个子系统,如交易系统、账户系统、会计系统、账户系统,每个子系统在处理各自的业务,系统间的对账,就是以上系统的核对,用于修正内部系统的数据不一致。
    2.
    支付系统与渠道的对账,这里的渠道泛指所有为支付系统提供代收付业务的渠道,如:第三方支付公司、银行、清算中心、网联、银联等。
    3.

    支付系统与渠道间的对账
    系统间的对账比较好理解,这里主要讲支付系统与渠道间的对账。支付系统与渠道间的对账,又包含2个维度:
    (1)
    信息流勾对:即业务对账/交易对账,主要是就收单交易的支付信息与银行提供的信息流文件进行勾兑。信息流的勾地能发现支付系统与银行系统间的掉单、两边由于系统间的原因导致的同一笔交易支付金额不一致(可能性很小)或者支付状态不一致。信息流勾兑一般用来恢复掉单数据,可通过补单或者具体系统问题排查解决。
    (2)
    资金流勾对:即资金对账,主要就收单交易的支付信息与银行提供的资金流信息进行勾兑。资金流的勾兑能发现支付系统在银行的帐户资金实际发生的变动与应该发生的变动的差异,比如长款(银行多结算给支付系统)和短款(银行少结算给支付系统)。

    说了这么多,就出现来4个对账文件,支付系统信息流文件、支付系统资金流文件、银行信息流文件、银行资金流文件。业务对账(勾兑)就是支付系统的信息流文件与银行的信息流文件勾兑,资金对账即支付系统的资金流文件与银行的资金流文件勾兑。

    核对的差异处理
    1、信息流勾对的差异处理

    支付系统信息流没有,而银行有的差异,可能是因为支付系统交易数据的丢失、银行的掉单,如果是银行的掉单,由支付公司的运营登录银行网银确认后,做补单处理,并将差异表中该记录核销。


    支付系统信息流有,而银行没有的差异,此种情况一般不会发生,因为支付系统所有的交易数据都是取银行返回状态的数据。

    2、资金流勾对对差异处理

    支付系统资金流没有,而银行有的差异。可能原因如下:1、银行日切晚与支付系统核心账务系统;2、支付系统账务核心系统与其他系统间的掉单。一旦出现,则会出现长款(即银行不应该结算而实际结算)的现象,对于因日切导致的差异,在第二天的对账中系统会对平,其他原因的,需要技术排查。


    支付系统资金流有,而银行没有的差异,可能是因为银行日切早于支付系统的核心账务系统,一旦出现,会出现短款(银行应结算而实际未结算)的现象,银行日切导致段差异,会在下一天与银行的勾对中,将此笔差异勾对上,如果是非日切导致的原因,就需要找银行追款了。

    总结就是,业务对账,即信息流对账,支付系统的交易流水与银行的交易流水间核对,保障支付交易完整入账。资金对账,即资金流对账,支付系统的入账流水与银行的结算流水间核对,保障银行入账流水与实际入账资金的匹配。

    结算流程

    在这里插入图片描述
    在清结算部分,系统按照设定好的清结算规则自动将钱款结算给商户。完善的运营会计体系帮助财务进行精细化核算,提高财务效率。与支付渠道自动进行对账,确保账务正确,在异常情况下能及时定位问题并处理。系统更是能对商户进行个性化的费率配置或账期配置,方便灵活。系统的价值不仅体现在支付清结算方面,同时更是提升了运营管理效率。支付清结算系统可以有效帮助运营、财务、开发以及管理人员。对于运营人员,系统可帮助处理平台的运营工作,包括各类支付管理,商户、会员管理,营销活动的数据统计等,全面提高运营效率。针对财务人员,可以协助完成资金对账、会计处理,出入款管理,账务差错处理等,大部分工作由系统自动处理,减少人工处理,提高资金处理效率。一套灵活便捷的配置后台供开发人员快速调整系统以适应新的业务,并能方便对系统进行维护,如渠道接入、费率配置、账期调整等,提高开发效率。系统提供资金流转过程中各个环节的数据,能够从各个维度进行核算和分析,形成对管理人员的决策支持,从而提高决策效率。
    03
    关键表设计
    在这里插入图片描述
    04
    支付系统要点
    在支付系统中,支付网关和支付渠道的对接是最繁琐重要的功能之一,其中支付网关是对外提供服务的接口,所有需要渠道支持的资金操作都需要通过网关分发到对应的渠道模块上。一旦定型,后续就很少,也很难调整。而支付渠道模块是接收网关的请求,调用渠道接口执行真正的资金操作。每个渠道的接口,传输方式都不尽相同,所以在这里,支付网关相对于支付渠道模块的作用,类似设计模式中的wrapper,封装各个渠道的差异,对网关呈现统一的接口。而网关的功能是为业务提供通用接口,一些和渠道交互的公共操作,也会放置到网关中。
    支付系统对其他系统,特别是交易系统,提供的支付服务包括签约,支付,退款,充值,转帐,解约等。有些地方还会额外提供签约并支付的接口,用于支持在支付过程中绑卡。 每个服务实现的流程也是基本类似,包括下单,取消订单,退单,查单等操作。每个操作实现,都包括参数校验,支付路由,生成订单,风险评估,调用渠道服务,更新订单和发送消息这7步,对于一些比较复杂的渠道服务,还会涉及到异步同通知处理的步骤。
    01
    网关前置
    支付网关前置是对接业务系统,为其提供支付服务的模块。它是所有支付服务接口的集成前置,将不同支付渠道提供的接口通过统一的方式呈现给业务方。这样接入方就只需要对接支付网关,增加和调整支付渠道对业务方是透明的。 支付网关前置的设计对整个支付系统的稳定性、功能、性能以及其他非功能性需求有着直接的影响。
    在支付网关中需要完成大量的操作,为了保证性能,这些操作都尽量异步化来处理。支付网关前置应保持稳定,尽量减少系统重启等操作对业务方的影响。支付网关也避免不了升级和重启。这可通过基于Nginx的LBS(Load Balance System)网关来解决。LBS在这里有两个作用: 一个是实现负载均衡,一个是隔离支付网关重启对调用的影响。 支付网关也采用多台机器分布式部署,重启时,每个服务器逐个启动。某台服务器重启时,首先从LBS系统中取消注册,重启完成后,再重新注册到LBS上。这个过程对调用方是无感知的。
    为了避免接口受攻击,在安全上,还得要求业务方通过HTTPS来访问接口,并提供防篡改机制。防篡改则通过接口参数签名来处理。现在主流的签名是对接口参数按照参数名称排序后,做加密和散列,参考微信的签名规范。
    02
    参数校验

    所有的支付操作,都需要对输入执行参数校验,避免接口受到攻击。


    验证输入参数中各字段的有效性验证,比如用户ID,商户ID,价格,返回地址等参数。


    验证账户状态。交易主体、交易对手等账户的状态是处于可交易的状态。


    验证订单:如果涉及到预单,还需要验证订单号的有效性,订单状态是未支付。为了避免用户缓存某个URL地址,还需要校验下单时间和支付时间是否超过预定的间隔。


    验证签名。签名也是为了防止支付接口被伪造。 一般签名是使用分发给商户的key来对输入参数拼接成的字符串做MD5 Hash或者RSA加密,然后作为一个参数随其他参数一起提交到服务器端。

    03
    路由选择
    根据用户选择的支付方式确定用来完成该操作的合适的支付渠道。用户指定的支付方式不一定是最终的执行支付的渠道。比如用户选择通过工行信用卡来执行支付,但是我们没有实现和工行的对接,而是可以通过第三方支付,比如支付宝、微信支付、易宝支付,或者银联来完成。那如何选择合适的支付渠道,就通过支付路由来实现。支付路由会综合考虑收费、渠道的可用性等因素来选择最优方案
    04
    风险评估
    检查本次交易是否有风险。风控接口返回三种结果:阻断交易、增强验证和放行交易。

    阻断交易,说明该交易是高风险的,需要终止,不执行第5个步骤;


    增强验证,说明该交易有一定的风险,需要确认下是不是用户本人在操作。这可以通过发送短信验证码或者其他可以验证用户身份的方式来做校验,验证通过后,可以继续执行该交易。


    放行交易,即本次交易是安全的,可以继续往下走。

    05
    发送消息
    通过消息来通知相关系统关于订单的变更。风控,信用BI等,都需要依赖这数据做准实时计算。
    06
    更新订单
    对于同步返回的结果,需要在主线程中更新订单的状态,标记是支付成功还是失败。对于异步返回的渠道,需要在异步程序中处理。
    07
    异步通知
    其中涉及到调用远程接口,其延迟不可控。如果调用方一直阻塞等待,很容易超时。引入异步通知机制,可以让调用方在主线程中尽快返回,通过异步线程来得到支付结果。对于通过异步来获取支付结果的渠道接口,也需要对应的在异步通知中将结果返回给调用方。 异步通知需要调用方提供一个回调地址,一般以http或者https的方式。这就有技术风险,如果调用失败,还需要重试。而重试不能过于频繁,需要逐步拉大每一次重试的时间间隔。 在异步处理程序中,订单根据处理结果变更状态后,也要发消息通知相关系统。
    08
    生成交易订单
    将订单信息持久化到数据库中。当访问压力大的时候,数据库写入会成为一个瓶颈。
    09
    交易流水和记账
    每一笔交易都需要记录流水,并登记到个人和机构的分户账户上,统计和分析也需要根据交易流水来更新相关数据。 而个人和机构账户总额更新、交易流水记录以及库存的处理,更是需要事务处理机制的支持。 从性能角度, 可以弱化了事务处理的要求,采用消息机制来异步化和交易相关的数据处理。

    在支付网关前置的主流程中,仅记录交易流水,即将当前的请求保存到数据库中。


    完成数据记录后,发送MQ出来,记账、统计、分析,都是接收MQ来完成数据处理。


    涉及到本地资金支付,比如钱包支付,会需要分布式事务处理,扣减账号余额,记账,扣减库存等,每个操作失败,都要回滚。阿里有很不错的分享,这里不详细描述。


    当交易量上来后,需要考虑交易表的分表分库的事情。分表分库有两个策略,按照流水号或者交易主体id来走。后者可以支持按用户来获取交易记录。我们用的是前者。后者可以走elastic,确保数据库专用。风控,信用和统计所需要的数据,通过MQ同步到历史库里面。作为支付系统最有价值的数据,在存储上做到专库专用,无可厚非,毕竟存储成本还是廉价的。

    10
    支付路由
    支付路由是一个复杂的话题。对支付系统来说,能支持的支付方式越多越好,不能由于支付方式的不支持断了财路。现实中的支付方式多得难以置信。用户随时甩出一张你听都没听说过的卡。如果一个银行卡只有几个用户在用,那针对这个卡开发个对接有点得不尝失。现在第三方支付的爆发,确实给开发支付系统省了不少事。但是公司不可能只对接一个第三方支付,如果这个渠道出问题了,或者闹矛盾了,把链接给掐了,老板还不欲哭无泪。总之,得对接多个渠道。对于交易量大的银行,还得考虑直联。
    11
    渠道接入
    对于支付渠道,首先考虑的是接入哪些渠道。要对接的渠道按优先级有:

    第三方支付,对大部分应用来说,支付宝和微信支付都是必须的,一般来说,这两者可以占到90%以上的交易量。用户不需要绑卡,授权后直接支付就行。各种平台都支持,性能和稳定性都不错。对于一些特殊业务,比如游戏,企业支付,可以查看一些专用的第三方支付平台。


    银联,它的存在,极大方便了和银行的对接。和第三方支付主要不同在两个地方一是需要绑卡,也就是用户先把卡号,手机,身份证号提供出来。这一步会折损不少用户。绑卡后,以后的支付操作就简单了,用户只需要输入密码就行。手机客户端不需要像第三方支付那样安装SDK,都在服务器端完成。当然,这是针对快捷支付。网银支付还是挺麻烦的。银联接入也需要ADSS认证。


    银行:2018年2月9日银监会公布了最新权威数字:一共【4549家】开发性金融机构1家:国家开发银行;政策性银行2家:进出口银行、农业发展银行;5大国有银行:工、建、农、中、交;邮储银行1家;全国性股份制商业银行12家:招行、中信、兴业、民生、浦发、光大、广发、华夏、平安、浙商、渤海、恒丰;金融资产管理公司4家:信达、华融、长城、东方四大AMC;城商行134家;住房储蓄银行1家;民营银行17家,如网商银行;农商行1262家;农村合作银行33家;农村信用社965家;村镇银行1562家;贷款公司13家;农村资金互助社48家;外资法人银行39家;信托公司68家;金融租赁公司69家;企业集团财务公司247家;汽车金融公司25家;消费金融公司22家;货币经纪公司5家;其他金融机构14家。一般对接一个银行预计有3周左右的工作量,大部分银行需要专线接入,费用和带宽有关,一年也得几万费用。不同银行对接入环境有不同要求,这也是成本。


    手机支付:比如苹果的In-App支付, 三星支付、华为支付等, 这些支付仅针对特定的手机型号, 支持NFC等,根据业务需要也可以接入。

    总结
    支付系统是一个繁杂的系统,其中涉及了各种错综复杂的业务流程,以上只是简单介绍了支付系统我们能看见的一些问题和设计,还有后续的系统保障没有写出来,没写出来的才是关键部分,比如:支付系统监控(业务监控分类、渠道监控、商户监控、账户监控)文章只是引子, 架构不是静态的,而是动态演化的。只有能够不断应对环境变化的系统,才是有生命力的系统。所以即使你掌握了以上所有的业务细节,仍然需要演化式思维,在设计的同时,借助反馈和进化的力量推动架构的持续演进。

    展开全文
  • 2018最新支付系统/第三方支付系统/第四方支付系统/聚合支这里写自定义目录标题 2018最新第三方API第四方支付平台程序源码完整开源全套完美运营版聚合支付平台源码,此平台源码是客户独家运营的版本,从2017年上线...

    2018最新支付系统/第三方支付系统/第四方支付系统/聚合支这里写自定义目录标题


    2018最新第三方API第四方支付平台程序源码完整开源全套完美运营版聚合支付平台源码,此平台源码是客户独家运营的版本,从2017年上线运营到2018年2月份,源码完美无错,独家可运营,各项功能齐全,各项接口都支持,此套系统客户都花了近十万元,市面上这样一套系统最少都是几千元,本站独家发布,有需要的可以拿来运营,源码开源支持二开,其它自行了解。
    亿美源码

    展开全文
  • 手机支付系统项目系统架构 手机支付系统项目系统架构 很不错内部学习资料
  • 在做第三方支付系统的时候,我们总是会听说到两个词:大额支付系统、小额支付系统,那么这两个支付系统的却别是什么呢?如下,是人民银行官方给出的解答。 大额支付系统: 一、什么是大额实时支付系统? 大额实时...
  • 网上疯传的异梦聚合支付系统全解密源码+易支付监控源码
  • 开源支付系统--龙果支付系统介绍

    千次阅读 2016-08-23 22:30:43
    龙果支付系统是国内首款开源的互联网支付系统,其核心目标是汇聚所有主流支付渠道,打造一款轻量、便捷、易用,且集支付、资金对账、资金清结算于一体的支付系统,满足互联网业务系统的收款和业务资金管理需求。
  • 支付系统-系统架构

    千次阅读 2019-04-08 22:10:33
    本文主要是从支付架构、支付流程分析、支付核心逻辑、支付基础服务、支付安全五个方面来详细讲述支付系统架构 (1)、架构的定义:架构一定是基于业务功能来展开的,主要是制定技术规范、框架,指导系统落地;好...
  • 支付系统-财务系统

    千次阅读 2019-04-10 14:08:53
    从业多年经手过的印象比较深刻的几个系统,我将其中对账及清结算系统进行了剥离,着重为大家分享一下支付系统需要具备哪些功能,以及当时在实际搭建过程中,我们对于功能及整体做出的具体选择。 首先如图所示,...
  • 二代支付系统

    千次阅读 2020-07-07 09:38:08
    中国现代化支付系统(China National Advanced Payment System)简称CNAPS是中国人民银行在现有全国电子联行系统基础上建立的一套更为先进、适应社会经济发展需要的跨行支付清算系统,它的建成将解决现有电子联行...
  • 聚合支付系统设计(一)

    万次阅读 多人点赞 2018-04-04 18:16:44
    商户聚合支付系统设计(一) 产品概述与整体设计 背景 如今,网购已经渗透到人们日常生活中的方方面面,做为网购的载体,互联网电商平台发展如火如荼,支付功能做为其不可或缺的一部分,实现起来,也有各种各样...
  • 支付系统架构

    千次阅读 2017-03-20 17:48:40
    大部分公司,只要想赚钱,就得上支付系统,让用户或者客户有地方交钱。 当然,公司发展的不同阶段,对支付系统的定位和架构也不同。整体上来说,我们可以把一个公司的支付系统发展分为三个阶段: 支付系统:...
  • 支付系统从架构上来说,分为三层; 支撑层: 用来支持核心系统的基础软件包和基础设施, 包括运维监控系统、日志分析系统等。 核心层: 支付系统的核心模块,内部又分为两个部分: 支付核心模块以及支付服务模块。 ...
  • 重点要理解中国现代化支付系统(CNAPS)体系、银联清算体系,然后才能理解其差异。1、中国支付清算体系先看一下《中国支付清算系统总体架构图》。 备注,图中“中央银行支付清算系统”部分是一代的,二代增加了网上...
  • 1. 商家开通支付 ...1.3 在支付产品列表添加支付方式,支付费率是支付系统用来计算商家手续费,单位:%,将支付产品上架 1.4 在用户支付配置页面添加支付配置信息,绑定已上架的支付产品 收款
  • 人行第二代支付系统总体介绍 中国人民银行支付结算司 张莉英
  • 支付系统详解:清结算系统

    千次阅读 2019-08-01 17:28:30
    清结算系统是第三方支付系统按照与商户的协议,将一个结算周期内的收付款项汇总轧差生成待结算金额,并将待结算金额结算给商户的一个功能模块,是支付系统的一个子系统。 第三方支付系统的清结算系统并不是与人行的...
  • 支付系统-支付核心》

    千次阅读 2019-05-19 23:10:34
    随着业务定制化的发展,对于交易支付系统要求越来越高,纪要保持系统的稳定性,有要具备灵活性,这是比较矛盾的事。支付前置的职责:支持业务变化的扩展性,将交易通过支付前置的配置转换为后端支付系统能统一处理...
  • 一、什么是支付系统 自古以来,所有的商业活动都会产生货币的收款与付款行为。在人类漫长的历史长河中,记录收付款行为的方式不断迭代:古代的账房先生通过手工记账,工业社会通过收银机机械记账…… 今天,进入了...
  • 聚合支付系统.zip

    2020-04-23 08:58:07
    全新ThihkPHP开发聚合支付系统兼容易支付系统免费开源,基于PHP+MySQL+ThihkPHP框架开发,支持对接银联通道、京东钱包、免签系统、PDD、淘宝代付、话费等,全响应式前端界面,简约易操作,安全便利快捷,为你稳定...
  • 移动支付系统

    千次阅读 2018-12-09 11:37:54
    跟银行合作开发过一个支付系统,整理下架构。  整体包括:进件接口-交易接口-清算系统-后台系统。  首先,这个系统在这里起到的主要是“中间商”的作用,它的上游是支付宝、微信支付和京东支付等第三方支付平台...
  • 支付系统-3交易系统》

    千次阅读 2019-05-12 23:39:09
    本文属于ping++《支付系统》白皮书读书笔记系列。 3. 1收单网关 收单网关主要负责吧业务系统的请求转化为支付系统的内部请求,主要是进行参数校验、权限检查等再对支付系统进行转发。 这里白皮书提到了通常是基于...
  • 账户体系是支付系统的基础,它的设计直接影响整个系统的特性。这里探讨如何针对电子商务系统的支付账户体系设计。我们从一些基本概念开始入手,了解怎么建模。 支付账户和登录账号 账户体系设计首先要区分两...
  • 电子支付系统PPT方案

    2009-10-17 20:15:22
    电子支付系统 电子支付系统 电子支付系统
  • 对于要了解第三方支付系统设计原理的重要核心资料。对于需要设计支付系统的架构师来说是重要的参考资料。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 274,068
精华内容 109,627
关键字:

支付系统