支付通道及系统设计

支付渠道,也可以叫支付通道,是指能够提供资金流转功能的通道,包括但不限于银行、第三方支付机构。我们常见的借记卡(储蓄卡)、贷记卡(信用卡)、微信、支付宝、云闪付等支付方式,都是通过对应的支付通道完成支付的。

支付渠道管理,通俗理解就是对支付渠道的管理, 为什么需要对支付渠道进行管理呢?下面通过场景说明其必要性。

场景一

电商公司A,在初期,为了使产品快速的成型上线,支付是辅助功能,支付收银台设计的是一个简单的收银台,只有【支付宝】,那我们该如何实现呢?

支付收银台只有一个支付方式——支付宝,是固定的,对应支付通道也是一个固定的,支付的时候直接请求支付宝就可以,调用流程简化如下

场景二

还是这个公司A,产品上线之后,业务发展的不错,产品也不断的迭代,单一的支付方式无法满足业务发展,收银台会发展到这样

相比于场景一,支持了更多的支付方式,这意味着需要接入更多的支付通道。后续也有可能会支持更多的支付方式,也就有可能需要接入新的支付通道。这个时候我们就需要思考了,比如下面的几个问题:

通道很多,如何对它们进行统一的维护呢?

当同一个支付方式有多个通道的时候,如何进行通道选择(即支付通道路由)?

后面如果新增通道,如何能灵活的进行添加呢?

这些可以总结为:需要对支付渠道进行管理。那支付渠道管理是管理什么?以及怎样进行支付渠道管理的设计呢?下面就以电商平台为例,进行支付渠道管理的设计。

01 场景分析

电商平台(以下简称平台A)的交易业务流程(担保交易)可以描述为以下几步。

1. 买家通过平台A购买商品:下单并支付完成;

2. 卖家收到订单,进行发货;

3. 买家收到包裹后,确认收货;

4. 平台A进行资金结算(按平台的结算规则),结算到卖家平台账户;

5. 卖家可以在平台A进行提现,提到卖家自己的银行卡。

在这个过程中,也可能发生退款,可以分为2类——售前退款和售后退款:

a)售前退款:买家下单支付成功之后,确认收货之前的退款。

b)售后退款:买家确认收货之后的退款。

两者主要的差异是退款的钱由谁来出,售前退款因为资金还没有结算给商家,所以资金是从平台A退给买家;售后退款就需要从商家的账户退给买家。

我们对上述流程进行简化,重点突出与支付渠道相关的部分,如下图所示。我们拆分成3个流程进行支付渠道需求分析:

1.1 支付流程

对平台A来说,首当其冲的是要保证用户能支付成功;其次才是其他的,比如通道的成本、用户体验等。分析渠道管理的功能:

(1)渠道的基本信息管理维护

渠道支持哪些支付方式。收银台展示的支付方式都可以走哪些渠道。

渠道的状态维护。例如某一个渠道现在有问题,那后续的交易是不能继续发到这个渠道的,需要维护成下线或者不可用。有的渠道有日常维护,比如每天的凌晨0点-1点不可用,需要增加渠道的维护时间配置。

(2)渠道路由

根据用户支付方式,选择一个最优的支付渠道。影响路由可能的因素,比如:通道费率、买家是否已经在某个通道支付过、渠道是否支持、渠道当前是否可用、支付环境(比如微信环境有h5、小程序、sdk,设计的时候可能会定义成不通的通道),以及也有可能会有一些业务上的限制,比如跨境交易只能走固定的几个通道。

(3)补单流程

正常情况下,渠道侧支付成功后,都会主动发送回调通知,告诉平台这笔订单的状态,但是如果出现了意外,渠道的通知服务异常了,单纯依靠渠道的回调就有问题了,用户银行卡已经扣钱了,但是平台的订单还是待支付,所以为了避免这种情况的发生,就需要有补单任务,主动去渠道查询订单状态。

(4)错误代码映射

提升用户体验。一般如果支付失败,渠道都会返回对应的错误代码以及错误原因,但是有些渠道,特别是银行卡支付的时候,因为失败的原因有很多种,且渠道直接返回的原因,如果直接展示给用户的话,用户不一定能理解,所以需要做一层转换,转换成用户容易理解的文案。

1.2 退款流程

退款都是原路退,即支付的时走的银联,退款的时候也走银联渠道退款。但是也有情况例外,比如:

超过通道的原路退款时间:每个通道不尽相同,有的是一年、两年或者更久,也有个的只有6个月,比如微信支付宝。超过期限就不能原路退了。

原路退异常:比如微信账号注销、卡注销等等。

所以退款这里,还需要考虑下无法原路退的情况,应该如何处理。

1.3 提现流程

这块涉及的功能和支付流程类似。需要额外考虑的是如果所有的提现渠道都有问题的时候,提现流程如何进行处理。

02.支付渠道管理设计

2.1 支付渠道管理总体架构设计

根据上一部分的业务场景分析,支付渠道管理系统的架构设计如下:

2.2 支付渠道路由

(1)路由要素分析

路由要素有很多,下图列了一下常见的要素。

渠道与支付方式的映射关系:是某个支付方式可以走哪个渠道的关键配置。

通道限额:除了微信或者支付宝支付的,银行卡支付通道都是有单笔支付限额,以及日限额。

渠道状态:渠道当前是否可以用。

渠道权重:比如建设银行-借记,提交筛选完之后,还有2个渠道可以用,这个时候就需要通过配置的权重,选择有限走哪个渠道。

白名单:渠道上配置白名单,白名单类型可以是卡号、买家用户ID、卖家用户ID,如果配置了白名单,在满足渠道条件之后,会优先走这个通道。

产品码:做业务区分。根据前面场景分析,某些渠道只能走特定的业务。

支付环境:同一种支付方式在不同的环境路由到不同的渠道。比如微信支付,可能的支付环境有:微信小程序环境、微信h5环境、SDK环境、浏览器环境,环境不一样,实际发送渠道请求的参数也不一样,所以需要进行区分。

渠道费率:每个渠道都会收手续费,会有一个费率配置。在实际路由配置的时候,费率选择问题可以和权重进行合并,运营人员直接根据产品策略,配置渠道权重,以达到目的。

维护时间:通道会有维护时间,即某段时间不能接受交易请求。银行类的交易,维护比较常见。

(2)路由逻辑

核心逻辑是——选择一个最优的可以使用的通道。其选择过程如图所示:

条件过滤:根据请求参数,选出所有符合条件的渠道集合。实现起来比较简单,配置好条件,筛选的时候逐个进行比较,如果符合就继续下一个条件,如果不符合就中止,进行一个下一个渠道筛选。

渠道选择:从可用的渠道集合中选择一个最优的渠道。一般会进行一个打分制,需要配置分数规则,比如配置的费率规则:

把所有的分数进行加和,就是这个渠道的分数,最后返回一个分数最高的渠道。比较特殊的,如果命中了白名单,则可以直接返回这个渠道。

(3)退款渠道路由

退款渠道的路由很简单,就是退款的时候获取到原单渠道,那么这个渠道就是退款渠道。

2.3 统一结果码映射

这里不仅有支付失败的错误文案映射,也还有订单状态的映射,因为渠道的返回报文有对应的返回码,这个在对接时候,渠道方会告知哪些返回码是成功的。这块的处理流程如下:

2.4 补单逻辑

不管是支付、退款还是提现,补单流程是统一的,如下图所示(图十一):

不同的是,支付/退款/提现的查询,需要请求不同的接口,需要跟进订单类型进行适配。

2.5 退款超期处理

这里说的超期包含2种情况:

一是这笔退款订单的处理超过了一定的时间还没成功,我们就认为可能是有问题。这个时间是多少呢?不同渠道还不一样,微信或者支付宝的退款一般是很快的,银行卡的退款可能会慢一点,最长可能会到几天才会成功,所以这个时间配置在渠道配置里;

二是这个笔订单像上面说的几种情况,没办法原路退款了。

这2种情况我们都是需要发现并解决的,毕竟最终是需要把钱退给买家的,所以我们需要把这部分订单找出来,然后进行处理就好。整个处理流程可以设计如下:

这块核心就是需要把这个订单发送到【线下处理系统】(一个能承载这部分订单且能串通这个流程的系统即可)。对于处理方式,常见的有:

联系买家,进行线下打款,打一笔资金到买家的银行账户或其他的收款账户。

如果是渠道系统问题,可以再把退款单进行原单重新发送(前提是渠道支持重复发送)。

03 支付渠道管理后台

3.1 支付银行管理

这里的支付银行和收银台侧支付方式对应,是用于后面配置支付渠道路由。

3.2 支付渠道管理

支付渠道管理维护了支付通道的基本信息。描述为:哪个机构(外部机构的简称)、什么业务(入款、出款等)、什么支付类型(借记、贷记渠道)的通道,并为其定义一个在该支付平台的唯一通道编码。其中:

  • 修改:对渠道基本信息进行修改;
  • 配置接口参数:对这个渠道的接口请求参数进行配置;
  • 银行配置:配置这个渠道能支持哪些支付银行。

3.3 渠道路由

渠道路由维护了支付银行和支付渠道的一些条件,如果需要修改。

3.4 白名单管理

白名单管理是为某个用户或者是卡号添加渠道白名单,在白名单列表里,渠道路由的时候有优先走这个渠道。

原文出自:人人都是产品经理

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

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

相关文章

使用vue3 + Ts + Vite + ElementPlus实现一个抽奖程序

一. 说明 这是一个通过vue3 Ts Vite ElementPlus实现的一个抽奖程序。项目链接 二. 整体架构与功能描述 左侧设置了奖品说明,每个奖项配有文字和图片简介。总共设置了四个奖项,分别是特等奖1名,一等奖2名,二等奖5名&#xf…

Eureka的使用手册

一、导入依赖&#xff08;服务端和客户端导入的依赖不一样&#xff09; 服务端&#xff1a; <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependenc…

Camtasia Studio 2023怎么导出mp4格式的视频的详细教程介绍

很多用户刚接触Camtasia Studio 2023&#xff0c;不熟悉如何保存mp4格式的视频。在今天的文章中小编为大家带来了Camtasia Studio 2023保存为mp4格式的视频的详细教程介绍。 Camtasia Studio 2023保存为mp4格式的视频的详细教程 1、 打开Camtasia Studio。 Camtasia Studio- …

[相遇 Bug] - ImportError: numpy.core.multiarray failed to import

背景: 因为最近在看点云模型, 在自己的环境上部署该项目: https://github.com/open-mmlab/OpenPCDet/tree/master 执行命令: 这里执行github项目给的demo.py文件, 命令格式如下: python demo.py --cfg_file cfgs/kitti_models/pointpillar.yaml --ckpt xxx/pointpillar_772…

PLSQL编程

1.概念和目的 1.1. 什么是PL/SQL? PL/SQL&#xff08;Procedure Language/SQL&#xff09; 是Oracle对sql语言的过程化扩展 (类似于Basic)&#xff1b; 指在SQL命令语言中增加了过程处理语句&#xff08;如分支、循环等&#xff09;&#xff0c;使SQL语言具有过程处理能力。…

做渲染多好的CPU配置才够用?经常看到的核心和线程数到底是什么?

很多设计师想买一台做渲染的电脑时&#xff0c;经常会看到处理器&#xff08;CPU&#xff09;的介绍中提到几核几线程的信息&#xff0c;却不懂到底是什么意思。其实CPU的几核几线程是指CPU的核心数和线程数&#xff0c;它们是衡量CPU性能的两个重要指标。那么做渲染要有多好的…

等保——windows终端和服务器测评

一、本文适用于Windows系统&#xff0c;但有些版本不适用&#xff0c;例如win10、win11等&#xff0c;因为没有密码策略模块 二、针对于win7的测评过程 1、winR打开命令行&#xff0c;输入gpedit.msc&#xff0c;打开本地组策略编辑器&#xff08;win10以上版本没有这个模块&…

QQ号码3个月未登陆真的要回收?

7月17日消息&#xff0c;微信号长期未使用会被回收的消息引起热议。 腾讯微信团队微博发文称&#xff1a;为保障用户的微信账号安全&#xff0c;注册后不活跃&#xff0c;长期未登录&#xff0c;并且没有零钱的微信账号&#xff0c;会被系统注销&#xff0c;无法使用。 不过也有…

海外媒体发稿:链游媒体发稿写作方法及优缺点解析

链游媒体发稿是一种新的媒体发布机制&#xff0c;它可以把信息准确、及时、有效地传播给大量的人&#xff0c;帮助企业实现信息的最大化传播&#xff0c;因此越来越多的公司也开始使用链游媒体发稿服务&#xff0c;本文就介绍链游媒体发稿写作的方法及小技巧。 一、链游媒体发稿…

JVM系统优化实践(19):GC生产环境案例(二)

您好&#xff0c;这里是「码农镖局」CSDN博客&#xff0c;欢迎您来&#xff0c;欢迎您再来&#xff5e; 接昨天的问题继续来说&#xff0c;在高并发场景中&#xff0c;对象过多容易导致OOM。由于高并发导致Young GC存活对象过多&#xff0c;因此会有太多对象进入老年代&#xf…

2.3Listbox列表部件

2.3Listbox列表部件 创建主窗口 window tk.Tk() window.title(my window) window.geometry(200x200)创建一个label用于显示 var1 tk.StringVar() #创建变量 l tk.Label(window,bgyellow,width4,textvariablevar1) l.pack()创建一个方法用于按钮的点击事件 def print_s…

Python自动化测试基础必备知识点总结

一、自动化测试的概念 性能系统负载能力稳定性过载操作下的系统瓶颈自动化测试&#xff0c;使用程序代替人工&#xff0c;可以提高测试效率性&#xff0c;自动化测试能自动化使用代码模拟大量用户&#xff0c;让用户请求多页和多用户并发请求收集参数&#xff0c;并对系统负载…