首页 » 网站推广 » phpredis对账技巧_若何做一个对账系统

phpredis对账技巧_若何做一个对账系统

访客 2024-12-12 0

扫一扫用手机浏览

文章目录 [+]

对账是支付系统中的一环,因此在对账前我们先理解一下干系的业务知识

业务知识

phpredis对账技巧_若何做一个对账系统

什么是对账

phpredis对账技巧_若何做一个对账系统
(图片来自网络侵删)

传统的对账便是核对账目,是指在司帐核算中,为担保账簿记录精确可靠,对账簿中的有关数据进行检讨和核对的事情。
在银行或者第三方支付中,对账实在是对一定周期内的交易进行双方确认的过程,一样平常都是在第二天银行或者第三方支付公司对前一日交易进行清分,天生对账单供平台商户下载,并将应结算款结算给平台商户。
在往下一层,在互联网金融行业或者电商行业中,对账实在便是确认在固定周期内和支付供应方(银行和第反方支付)的交易、资金的精确性,担保双方的交易、资金同等精确。

广义的对账,所有跨运用的数据交互,理论上都该当进行对账。
以是对账也可以分为信息流对账,资金流对账。
信息流对账也一样平常用在自己内部系统的对账,比如支付系统的支付数据和业务系统的业务数据进行对账,担保资金交易和业务交易的同等性。
资金流对账也便是支付系统和银行或者第三方支付系统之间的资金交易对账。

对账办法

单向对账:一样平常拿第三方支付机构或银行流水,与自己系统进行对账,防止涌现掉单问题;

双向对账:两个运用间的流水进行双向核对,如订单与财务系统,既要担保财务系统支付成功的记录,订单系统也是成功的;也要确保订单系统记录成功的记录,财务系统也成功。

我们一样平常采取双向对账的办法进行对账

对账干系的问题

不同系统日切点不一致问题:滚动对账

差错处理:补账,补偿(退款)

干系观点

轧帐和平帐

每一笔交易,都要做到各参与者的记录能够吻合,没有偏差。
对账系统的事情,是创造有差异的记录,即轧帐;然后通过人工或者自动的办法,办理这些差异,即平帐。

长款和漏单

在以平台交易为基准的情形下和银行对账,创造周期内的交易,平台有此订单而第三方支付中没有订单,成为平台长款。
平台长款一样平常是由于用户在支付的时候跨天的情形,比如用户在23:58分创建了订单,在第二天的凌晨00:03分进行了支付。
在以银行交易为基准的情形下对账,银行有此订单而平台无此订单,即为平台漏单。
平台漏单很少见,一样平常直接转人工处理。

账户体系

在一样平常的支付体系中会分为登录账户和支付账户,支付账户指用户在支付系统中用于交易的资金所有者权柄的凭据;登录账号指用户在系统中登录的凭据和个人信息。
一个用户可以有多个登录账户,一个登录账户可以有多个支付账户,比如零钱账户、储值卡账户等。
一样平常来说,支付账户不会在多个登录账户之间共用。
对账的交易一样平常都是支付账户参与交易。

交易与账户

账户设置,一样平常是从交易开始的。
交易的实现必须有账户的支持,账户是交易的基本构成元素。
从支付系统的角度,交易中涉及到的资金流是资金从一个账户流向另一个账户。
发起交易的一方,被称之为交易主体,他可以是一个人,也可以是一个机构。

清算和结算

清算紧张是指不同银行间的货币收付,可以认为是结算进行之前,发起行和吸收行对于出指令的发送、吸收、核对确认,其结果是全面交流结算工具和支付信息,并建立终极结算头寸。

结算是指将清算过程产生的待结算头寸分别在发起行、吸收行进行相应的司帐处理,完成资金转移,并关照收付双方的过程。
当前,大多数银行结算业务的完成紧张通过两类账户:一是银行间相互开立的代理账户,二是开立在央行、独立金融机构如银联、或者第三方支付机构的账户。

清算:打算各方应收搪塞钱款的韶光与金额。
结算:根据清算的结果在指定的韶光对各方进行实际的资金转移操作

资金池

用户备付资金(如充值)统一放在企业的银行账户中,企业可以随意支配这些资金,即为资金池。
与之对应的是第三方托管,用户备付资金是放在企业在第三方支付机构为用户开设的虚拟账户中,企业无法随意取出这些资金。
现在互联网金融全面哀求接入银行存管,便是银行会为每个用户创建一个资金账户来保护用户的资金,互联金融公司不能随意划拨这些资金账户中的金额。

对账系统

对账设计

对账系统的设计阶段,将对账系统分为四个模块,每个模块的卖力自己的职能。

文件获取模块:下载或者读取各渠道对账文件

文件解析模块:创建不同的解析模板,根据渠道和文件类型获取对应的解析模板进行解析

对账处理模块:对账的业务逻辑处理

差错处理模块:处理差错池中的订单

一样平常会设计一个定时任务,每天固定的韶光点触发,定时驱动调度类分别调用四个模块来处理对账。
也有的银行会主动的推送对账单,再通过http回调来触发对账流程。

对账算法

一、流程:

1、从上游渠道(银行、银联等金融机构)获取对账文件,程序逐行解析入库;

2、在程序处理中,以上游对账文件的表为基准,程序逐行读取并与我们系统的交易记录比拟账务记录(有账务系统情形下,合理方案该当是于账务记录)比拟,查找出差异记录;

3、以我们系统的交易记录比拟账务记录为基准,程序逐行读取与上游对账文件比拟,查找出差异记录。

二、毛病:

1、对账过程中查询干系数据,如果数据量巨大,对数据库性能影响较大,而且对账逻辑扩展极为麻烦;

2、逐行比对算法效率较低,但算法上并无好的优化余地。
如果采取数据库INTERSECT、MINUS对数据库压力也高;

3、在业务量大的情形下(例如有上百家上游渠道须要对,每一家都有几十万条交易记录),对账做事器及数据库做事器负荷较高。
即便采取读写分离,对账时候利用读库,压力一样很大;

4、导入批量文件,逐行入库效率较为低下(每一次都须要建立网络连接、关闭连接)。

三、改进:

1、涉及网络传输的,只管即便采取批量办法操作,减少网络花费及时间花费;

2、利用Redis等NOSQL数据库,降落数据库做事器的压力。
同时在扩展上也随意马虎,一台Redis做事器不足,可以无限制增加用于对账用的做事器;

3、利用Redis的set凑集的sdiff功能,利用Redis sdiff算法的高性能,比对上游记录和我方记录的差异。

对账流程

1、下载对账单

大多数银行都哀求接入方供应ftp做事,银行定时将对账单推送到接入方供应的ftp做事器上面;还有一部分银行会供应对账单的下载做事,通过ftp/http的都有,ftp办法居多;其余网银的对账单比较分外,一样平常都须要结算登录网银的后台管理系统中,手动下载,结算下载完对账单后在导入到对账系统。

技能实现上可以做成工厂模式,不同的支付渠道有不同的下载类,如果是http接口将文件写入到对账单,如果是ftp做事器,将做事器中的对账单下载到本地带解析的目录中。
紧张涉及的代码ftp工具类、http(s)工具类,干系IO读写。

技能选型上,HTTP(S)用apache httpclient即可实现链接池和断点续传, FTP也可以利用Apache Commons Net API。
但不管是哪一个,都须要设置重试次数和链接超韶光。
重试次数和间隔的设置须要小心,重试太频繁,随意马虎把做事器打去世.;韶光间隔太大,又会壅塞后续处理步骤。
5~10分钟是一个得当的重试间隔区间。

2、创建批次

创建批次一方面是为了防止重复对账,另一方面须要在对账结束的时候将对账的结果信息存储到批次中。

3、解析文件

解析文件紧张是将下载的对账文件解析成我们可以对账的数据类型并且入库。
解析的文件不同渠道有不同的类型,因此也可以设计身分歧的解析模板,利用工厂模式将不同格式的文件解析成可以对账的统一数据类型。
解析的文件类型一样平常包括:json、text、cvs、excle等,其余部分银行会对账单做加密或者供应zip打包的格式,这里就须要额外开拓zip工具类和加解密工具类进行处理。

对账文件中包含的紧张信息有:商户订单号、交易流水号、交易韶光、支付韶光、付款方、交易金额、交易类型、交易状态这些字段。

4、对账处理

对账处理也是对账的核心逻辑,详细分为以下的几个步骤来实现:

查询平台所有交易成功的订单

查询平台所有的交易订单

查询平台缓存池中的数据

查询银行交易成功的订单

开始以平台的数据为准对账,平台长款记入缓冲池

开始以银行通道的数据为准对账

以平台订单为基准对账逻辑:以平台所有交易成功的订单为基准,遍历银行订单的所有数据,找出订单号相同的订单,比拟订单的金额、手续费是否同等。
如果同等跳过;如果不一致,平台订单进入差错池;如果在银行订单中没有找到此笔交易,订单进入缓存池,记录平台长款。
同时统计对账干系金额和订单数。

以银行订单为基准对账逻辑:以银行的交易数据为基准,遍历所有平台的交易(包括未成功的订单),找出订单号相同但支付状态不一致的订单,在进行比拟金额存入差错池。
如果没有在平台的交易中找到此订单,再从缓存池中遍历查找,找到对应的平台订单验证金额是否同等,不一致进入差错池。
如果在缓存池汇中依然没有找到对应的订单,直接进入差错池,记录平台漏单。
同时统计对账干系金额和订单数。

5、对账统计

根据对账处理中,统计的干系信息包括:对账完成韶光、对账是否成功、平账的金额和订单数、差错的金额和订单数、缓存池金额和订单数等。

6、差错处理

在一样平常系统中,差错处理分为两种,一种人工来处理,一种系统自动来处理。

紧张有如下情形:

1、本地未支付,支付渠道已支付。
这紧张是本地未精确吸收到渠道下发的异步关照导致。
一样平常处理是将本地状态修正为已支付,并做相应的后续处理,比如关照业务方等。

2、本地已支付,支付渠道已支付,但是金额不同,这个须要人工核查。

3、本地已支付,但是支付渠道中无记录;或者本地无记录,支付渠道有记录。
在打消跨日成分外,这种情形非常少见,须要理解详细缘故原由后做处理。

原文出处:纯洁的微笑

标签:

相关文章