第三方支付-手续费系统设计与实现

1、手续费中的概念

1.1 手续费的定义

        根据百度百科的定义,“手续费:办事过程中所产生的费用”,“手续费”可以这样解释:为代理他人办理有关事项所收取的一种劳务补偿;或对委托人来讲,是属于因他人代为办理有关事项,而支付的相应报酬。如:证券交易手续费、代办机票手续费、代扣代缴费用手续费、国债代办手续费等等。

        根据以上的概念可以得知,在支付系统中,手续费是支付平台向在进行资金转移的过程中,支付系统的使用方向支付平台支付的“报酬”,也可以称为服务费。

1.2 手续费账户

        支付系统的用户或者商户将支付的手续费最终支付的账户,称为手续费收益账户。

2、手续费的业务模型设计

2.1 收款手续费

收款过程中收取的手续费,资金流的方向是商户账户到手续费账户。收款是从银行卡充值到支付系统中。

2.2 付款手续费

付款是将钱从支付系统的账户中体现到银行卡的过程。手续费的资金流是从商户账户到手续费账户。

2.3 交易买卖方手续费

一笔交易是从商户a到商户b的支付账户中。这笔交易过程可能对商户a买方和商户b买方收取手续费。手续费的资金流是商户a到手续费账户,商户b到手续费账户。

3、以交易为例手续费资金流说明

        本例中买方和卖方都需要支付交易的手续费。商户a支付100元给商户b,需要卖方商户a支付2元手续费,则商户a共支付102元,商户b支付3元交易手续费,则商户b共收到97元。

 伪代码如下:

    /** 创建交易 */public abstract Response createTransaction(Request request);/** 支付交易 */public abstract Response payTransaction(Request request);/** 确认交易 */public abstract Response confirmTransaction(Request request);

        注意手续费金额单位可以是元也可以是分,为了保证减少小数计算对计算准确度的干扰,推荐使用单位分来作为单位。数据库中amount的单位是分。存储100分,记为1元。Java中金额计算必须要用Bigdecimal 类型,但是如果保证系统中不出现小数,可以使用long来表示金额。

4、手续费的四种计算方式

4.1 按单笔固定金额收取费用

单笔固定金额收费,无论交易金额的大小,比如设置每一笔交易的收费为5毛,那么不管交易额为10元,还是100元,收费均为5毛。

4.2 按比例收取费用

按比例收取费用代表每一笔交易固定比例手续费,比如每笔交易收取5%的手续费,100元则收取5元。

4.3 按固定周期收取费用

按固定周期收取费用,比如按年收费,按月收费,按日收费等;比如按年交易额为1000元,固定收取一次手续费1000元。

4.4 按组合收取费用

按组合收取手续费,比如设置1000元以下的交易额时,按5毛一笔收费,大于1000元时,按百分比收费。

5、手续费相关的数据库设计

        一笔交易的手续费涉及买卖双方的手续费,我们将手续费信息存储在交易表中。交易表中的手续费信息设计的字段如下:

交易表
字段名称类型说明
idvarchar主键
fee_buy_amountbigint买方手续费
fee_buy_user_idbigint买方手续费账户
fee_buy_account_typesmallint买方手续费账户类型
fee_sell_amountbigint卖方手续费
fee_sell_user_idbigint卖方手续费账户
fee_sell_account_typesmallint卖方手续费账户类型

6、手续费记账代码实现

/**创建交易时将手续费计算出来*/@Overridepublic Response createTransaction(Request request) {//买方账户String buyUserId = request.getUserId();//交易类型:到卡、到账户Integer feeType = request.getFeeType();//对公、对私Integer payType = request.getPayType();//交易金额Long amount = request.getAmount();//交易的单号String transactionId = request.getTransactionId();//获取交易手续费信息FeeInfo payFeeInfo = feeService.getPayFeeInfo(buyUserId, feeType, payType, amount, transactionId);if(!payFeeInfo.getErrno().equals(SUCCESS)){return new Response(ERR_UNKNOWN);}//创建交易单Response trans = payTransService.createTrans(payFeeInfo);if(!trans.getErrno().equals(SUCCESS)){return new Response(ERR_UNKNOWN);}//支付交易单Response payTrans = payTransService.payTrans(payFeeInfo);if(!trans.getErrno().equals(SUCCESS)){return new Response(ERR_UNKNOWN);}return new Response(SUCCESS);}

实现注意的地方:

1) 调用第三方服务超时可以重试,通过框架实现重试(基于guava-retrying实现或者spring-retry),也可以通过业务实现重试,将调用接口通过消息队列实现,只有获取明确的结果报文才停止调用。

2)保证单号的唯一:同一单号在上下游的系统里保证唯一,可以加交易单号设置成唯一索引或者一个中间映射表的主键。

3) 保证服务的幂等性:如果下游没有落单,并发请求可能拿到不同的影响结果,不能保证接口的幂等性。比如交易账户被冻结,并发两笔请求,第一次请求结果返回交易成功,第二次请求返回账户被冻结,刚好覆盖第一次的请求结果。可以通过分布式锁保证交易结果并发情况下拿到唯一的结果。

4)涉及到多张表的修改:同一数据库开启本地事务即可,分布式数据库开启分布式事务,比如TCC。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

盛世昊通董车长APP新功能上线,看视频获收益

近日,盛世昊通董车长APP新功能上线,新版本中首次加入视频广告“任务中心”,看视频广告就能获取收益,通过该功能,用户只要在董车长APP中邀请好友一起看视频做任务即可获取高额视频豆。积累的视频豆可以在董车长APP兑换分红收益,这个既能开开心心看广告又能获取丰厚收益的功…

CRM原型、协同办公APP高保真原型/审批管理、办公申请、工单管理、任务管理、日程管理、工作报告、签到考勤、客户管理、销售线索、商机管理、订单管理、账务管理、统计报表、回款管理、发票管理、报销管理

CRM及协同办公APP高保真原型/审批管理、办公申请、工单管理、任务管理、日程管理、工作报告、签到考勤、客户管理、销售线索、商机管理、订单管理、账务管理、统计报表、回款管理、发票管理、报销管理 Axure原型演示及下载地址:Axure Cloud - Generating Project A…

电子不停车收费系统(ETC)专题(1)——系统概述

我国道路交通普遍较为拥堵已经在国人的脑海中留下了深刻的印象,每当车辆通过收费站时都要停下来缴费,既耽误了司机和乘客的时间,又消耗了交通管理部门的人力、物力和财力,更重要的时候,加剧了交通拥挤。因此&#xff0…

互融云汽车融资租赁系统-汽车金融软件开发

汽车融资租赁作为汽车金融中典型的业务模式,是一种依托现金分期付款的方式,在此基础之上引入出租服务中所有权和使用权分离的特性,租赁结束后将所有权转移给承租人的现代营销方式。即在租赁期内,用户以分期支付租金的方式获得车辆…

酷信即时通讯开放平台和支付系统简述

一、通过网页申请成为开发者,审核通过后集成开放平台SDK到自己的APP或游戏中,运行时如果未安装酷信IM则提示安装,否则提示是否授权使用酷信IM帐号登录。 二、登录后,可分享给酷信即时通讯的好友、群组、生活圈,比如分享…

免费会员管理管理系统

csdn下载链接: https://download.csdn.net/download/zhupengfei/11422345 本软件可免费使用,无限制。需要的可以直接下载安装。本软件win10可直接使用,其他版本的可能需要安装.net4.0组件。安装时有提示。 最近比较忙,软件已免…

开发CRM客户关系管理系统需要多少钱

现阶段各个领域都少不了和客户相处,所以也必须对住户关联进行监管,跟踪业务流程进度情况,促使协作。伴随着现代科技的高速发展,及其管理模式的兴起,CRM客户关系管理系统开发逐步完善,而且在销售工作普及化。…

恒溢会员管理系统使用说明

恒溢会员管理系统是这样一款专业的会员管理软件,可针对不同行业(理发店、美容院、美甲店、休闲、娱乐、汽车服务、洗衣店等),可实现对会员基本信息、充值、套餐、消费、优惠、提成、统计、报表等综合性的管理,可选配短…

免费的图书管图书借阅管理系统

百宝云图书借阅系统 基于百宝云在线表单设计的图书借阅系统,实现了三个基本功能。主要运用到了百宝云表单系统的数据联动和计算公式。这样借书还书只要扫一个条形码,图书资料会自动显示。本套系统免费使用,适合中小型图书借阅机构和简单图书…

CRM系统多少钱一套?盘点主流各大CRM系统价格

阅读本文你将了解:1.CRM定价规则;2.各大CRM系统报价(CRM系统多少钱一套);3.CRM系统费用构成。 一、CRM定价规则 很多企业都寻求使用CRM系统来管理客户关系,从而优化管理流程,提升业绩。 对于企业而言&…

开发一套CRM系统要花多少钱?收费标准又是怎么样?

如今,越来越多的企业开始选择定制开发CRM客户管理系统。那么开发一套CRM系统要花多少钱?收费标准又是怎么样的呢? CRM企业管理软件,在90年代末美国落地初期,通用型CRM软件因更易学习、费用较便宜等原因曾风靡一时。 …

快鲸写字楼物业管理软件收费标准如何?

快鲸写字楼物业管理软件介绍 快鲸写字楼物业管理软件是快鲸科技有限公司旗下产品,有着强大的系统功能优势,能助力商住不动产快速招商,智能租赁管理和高效的资产管理。适用于写字楼、商场、公寓、办公园区、创客空间、商业楼宇等业态。 软件自…

CRM系统多少钱一套?一文了解国内9家价格费用

国内CRM的大概价位是多少?针对这个问题,我只能给到各家企业的标准套餐的报价,实际购买中的价格受多种因素影响,例如:购买人数、使用功能、是否个性化定制、是否需要实施服务等等。因此这篇文章会分为两部分来说明价位&…

云借阅图书管理系统

前言 基于SSM(Spring Spring MVC Mybatis)框架开发的一个较为简单的云借阅图书管理系统,虽然比较简单,但是耐心的做完会对 Spring框架 和 Spring MVC框架 以及 Mybatis框架 这三个框架的整合开发有一个较好的理解。下面我就来简…

苏炳添博士论文研究自己,奥运学术两兼顾

本文转载自IT之家 “我为什么能跑这么快?” 这可不是调侃,而是“亚洲飞人”苏炳添的正经博士论文! 在题为《新时代中国男子 100m 短跑:回顾与展望》的论文中,苏炳添详细地分析了中国男子百米跑跻身世界一流的原因&a…

世界杯论文

♥️作者:小刘在C站 ♥️每天分享云计算网络运维课堂笔记,疫情之下,你我素未谋面,但你一定要平平安安,一 起努力,共赴美好人生! ♥️夕阳下,是最美的,绽放,愿…

你知道ERD Online中可以使用ChatGPT吗

功能介绍 ERD Online在4.1.0版本中,加入了ChatGPT功能,所有登录用户均可免费使用。 基于ChatGPT,ERD Online可以快速新建模型,自动生成数据分析需要的SQL,快速生成表字段中文注释等 和SQL相关的功能,你都可…

如何抓取trace

第一种方式: 1、打开 2、 3、文件还在platform-tools\Systrace中, 4、 chrome://tracing/ 第二种方式: 打开手机中的开发者选项的系统追踪。 然后进行录制。 Shift鼠标右键打开powershell https://ui.perfetto.dev/

爬取淘宝任意商品数据,你上你也行

文章目录 构造url分析页面结构爬取多页数据最后 构造url 第一页url https://s.taobao.com/search?q"面膜"第二页url https://s.taobao.com/search?q"面膜"&bcoffset4&p4ppushleft2%2C48&s44&ntoffset4第三页url https://s.taobao.com/se…

淘宝商品数据爬取并分析数据

一、抓取数据 1、抓取数据的意义 对电商来说,抓取某些数据,再进行分析,可以有效地反映出数据在某个区间内变化情况。数据受某些因素而发生巨大的影响,也可以借助分析的数据来规划相关项目的后续发展。因此,如果能利…