多渠道的支付系统之支付路由(二)

2023-01-09  本文已影响0人  天草二十六_简村人

一、背景

作为一个支付平台,在对接了多个第三方支付渠道后,面临的一个问题是用户在具体某业务下,应该使用哪个支付渠道的哪个商户。
你可以开发一个收银台,让用户主动选择使用哪个三方支付。也可以由支付系统来切换至某个渠道。

本文主要讲述一个支付平台,从实现层面,怎么支持多业务多渠道多商户的灵活切换。目前市面上的支付方式,夸张地说,除了微信支付就是支付宝支付。这是对于用户来说的。但是具体是哪个渠道,又可能是微信官方,也可能是农行等银行方,这是对用户透明的。

在实际对接的时候,我们还会遇到某个商户被封禁的情况,所以要求我们必须快速切换到备用的商户下。

简单梳理下,这里有三层关系。
用户 --》 支付方(微信/支付宝)【第一层】--》渠道(官方/银行)【第二层】--》商户【第三层】

用户看到的就是使用微信Or支付宝这种支付方式, 然而作为支付平台,是要知晓整个的三层关系。

二、数模设计

2.1、ChannelType渠道类型

定义第三方支付,这里的记录数决定于你对接了多少第三方支付。

image.png

2.2、ChannelAccount账户表(商户表)

不同的支付渠道,商户配置的字段不一样,且那些字段不会用于查询,所以我们建议你把那些配置的字段作为一个json字符串统一存储。

农行的配置.png 杭州银行的配置.png

2.3、ChannelBiz渠道路由

业务使用的支付方式和商户的映射关系。

支付方式,比如微信的产品就包括:WX_NATIVE、WX_JSAPI等。
再比如杭州银行的产品又包括:HzBank_QR、HzBank_JSAPI等。

2.4、Channel

ChannelType和Channel是一对多的关系。

image.png

三、支付请求接口

请求地址:@PostMapping("/api/v1/trade/create")
请求入参示例:

{
// 支付金额
    "amt":1,
// 业务编码
    "bizType":111,
// 渠道编码(渠道类型_支付产品)
    "channelCode":"HzBank_JSAPI",
// 币种,不同的支付方,可能对币种的编码不一样,需要进行一个转换。
    "currency":1,
// 订阅回调的url
    "notifyUrl":"http://xxx.xx.com/api/v1/order/agencyNotify",
// 当是jsapi支付方式时,必须传openId
    "openId":"oPXZV5dFgfQxUk1vGyH7Qk712xwk",
// 小程序或公众号的应用ID
    "appId":"wxa682fba97fb9b12x",
// 先创建订单,再请求支付
    "orderNo":"013CS607C",
// 用户ID和名称
    "userId":109784,
    "userName":"用户名称"
}

四、支付路由的实现

1、根据业务编码和支付方式,查询支付路由表,得到支付商户。

2、组装请求第三方支付的入参等信息

3、发起请求

4、处理第三方支付的响应报文,返回给业务方

5、等待支付方回调我们,更新支付订单表。

6、回调订单服务,更新订单的状态和支付信息。也可能需要回调其他业务方。

上一篇 下一篇

猜你喜欢

热点阅读