Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
jinli gu
Jeepay
Commits
c007706c
Commit
c007706c
authored
Jun 16, 2023
by
yurong
Browse files
支付网关增加自定义接口文档
parent
0627791b
Changes
8
Expand all
Hide whitespace changes
Inline
Side-by-side
jeepay-payment/pom.xml
View file @
c007706c
...
...
@@ -130,6 +130,11 @@
<version>
pls-1.3.0
</version>
</dependency>
<!-- Knife4j -->
<dependency>
<groupId>
com.github.xiaoymin
</groupId>
<artifactId>
knife4j-openapi2-spring-boot-starter
</artifactId>
</dependency>
</dependencies>
...
...
jeepay-payment/src/main/java/com/jeequan/jeepay/pay/config/SwaggerConfiguration.java
0 → 100644
View file @
c007706c
package
com.jeequan.jeepay.pay.config
;
import
com.github.xiaoymin.knife4j.spring.extension.OpenApiExtensionResolver
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
springfox.documentation.builders.ApiInfoBuilder
;
import
springfox.documentation.builders.RequestHandlerSelectors
;
import
springfox.documentation.spi.DocumentationType
;
import
springfox.documentation.spring.web.plugins.Docket
;
import
springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc
;
/**
* knife4j 自定义文档配置
* API访问地址: http://localhost:9216/doc.html
* @author yr
*/
@Configuration
@EnableSwagger2WebMvc
public
class
SwaggerConfiguration
{
private
final
OpenApiExtensionResolver
openApiExtensionResolver
;
@Autowired
public
SwaggerConfiguration
(
OpenApiExtensionResolver
openApiExtensionResolver
)
{
this
.
openApiExtensionResolver
=
openApiExtensionResolver
;
}
@Bean
(
value
=
"defaultApi"
)
public
Docket
defaultApi
()
{
String
groupName
=
"支付网关"
;
Docket
docket
=
new
Docket
(
DocumentationType
.
SWAGGER_2
)
.
apiInfo
(
new
ApiInfoBuilder
().
version
(
"1.0"
).
build
())
//描述字段支持Markdown语法
.
groupName
(
groupName
)
.
select
()
.
apis
(
RequestHandlerSelectors
.
withMethodAnnotation
(
ApiOperation
.
class
))
.
build
()
.
extensions
(
openApiExtensionResolver
.
buildExtensions
(
groupName
));
return
docket
;
}
}
jeepay-payment/src/main/resources/application.yml
View file @
c007706c
...
...
@@ -4,3 +4,12 @@ server:
spring
:
redis
:
database
:
3
#1库:运营平台 #2库:商户系统 #3库:支付网关
# knife4j APIDOC文档
knife4j
:
enable
:
true
documents
:
-
group
:
支付网关
name
:
接口文档
# 某一个文件夹下所有的.md文件
locations
:
classpath:markdown/doc/*
\ No newline at end of file
jeepay-payment/src/main/resources/markdown/doc/api1.md
0 → 100644
View file @
c007706c
[TOC]
## 协议规则
传输方式:采用HTTP传输(生产环境建议HTTPS)
提交方式:
`POST`
或
`GET`
内容类型:
`application/json`
字符编码:
`UTF-8`
签名算法:
`MD5`
## 参数规范
交易金额:默认为人民币交易,单位为分,参数值不能带小数。
时间参数:所有涉及时间参数均使用精确到毫秒的13位数值,如:1622016572190。时间戳具体是指从格林尼治时间1970年01月01日00时00分00秒起至现在的毫秒数。
## 签名算法
`签名生成的通用步骤如下`
***第一步:**
*
设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1
&
key2=value2…)拼接成字符串stringA。
特别注意以下重要规则:
◆ 参数名ASCII码从小到大排序(字典序);
◆ 如果参数的值为空不参与签名;
◆ 参数名区分大小写;
◆ 验证调用返回或支付中心主动通知签名时,传送的sign参数不参与签名,将生成的签名与该sign值作校验。
◆ 支付中心接口可能增加字段,验证签名时必须支持增加的扩展字段
***第二步:**
*
在stringA最后拼接上key
`[即 StringA +"&key=" + 私钥 ]`
得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,再将得到的字符串所有字符转换为大写,得到sign值signValue。
如请求支付系统参数如下:
```
java
Map
signMap
=
new
HashMap
<>();
signMap
.
put
(
"platId"
,
"1000"
);
signMap
.
put
(
"mchOrderNo"
,
"P0123456789101"
);
signMap
.
put
(
"amount"
,
"10000"
);
signMap
.
put
(
"clientIp"
,
"192.168.0.111"
);
signMap
.
put
(
"returnUrl"
,
"https://www.baidu.com"
);
signMap
.
put
(
"notifyUrl"
,
"https://www.baidu.com"
);
signMap
.
put
(
"reqTime"
,
"20190723141000"
);
signMap
.
put
(
"version"
,
"1.0"
);
```
`待签名值`
:
amount=10000
&
clientIp=192.168.0.111
&
mchOrderNo=P0123456789101
&
notifyUrl=https://www.baidu.com
&
platId=1000
&
reqTime=20190723141000
&
returnUrl=https://www.baidu.com
&
version=1.0
&
key=EWEFD123RGSRETYDFNGFGFGSHDFGH
`签名结果`
:4A5078DABBCE0D9C4E7668DACB96FF7A
`最终请求支付系统参数`
:amount=10000
&
clientIp=192.168.0.111
&
mchOrderNo=P0123456789101
&
notifyUrl=https://www.baidu.com
&
platId=1000
&reqTime=20190723141000&
returnUrl=https://www.baidu.com
&
version=1.0
&
sign=4A5078DABBCE0D9C4E7668DACB96FF7A
>
运营管理平台可以管理商户的私钥
`提示:`
签名以及接口调用,请使用jeepay官方提供的sdk:https://gitee.com/jeequan/jeepay-sdk-java
\ No newline at end of file
jeepay-payment/src/main/resources/markdown/doc/api2.md
0 → 100644
View file @
c007706c
This diff is collapsed.
Click to expand it.
jeepay-payment/src/main/resources/markdown/doc/api3.md
0 → 100644
View file @
c007706c
[TOC]
## 统一退款
商户业务系统通过统一退款接口发起退款请求,Jeepay支付网关会根据商户发起的支付订单号,找到对应到支付通道发起退款。
> 接口说明
适用对象:
`普通商户`
`特约商户`
请求URL:https://pay.jeepay.vip/api/refund/refundOrder
请求方式:
`POST`
请求类型:
`application/json`
或
`application/x-www-form-urlencoded`
> 请求参数
字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述
------- | -------| -------| -------| -------| -------
商户号 | mchNo | 是 | String(30) | M1621873433953 | 商户号
应用ID | appId | 是 | String(24) | 60cc09bce4b0f1c0b83761c9 | 应用ID
支付订单号 | payOrderId | 是 | String(30) | P20160427210604000490 | 支付中心生成的订单号,与mchOrderNo二者传一即可
商户订单号 | mchOrderNo | 是 | String(30) | 20160427210604000490 | 商户生成的支付订单号,与payOrderId二者传一即可
商户退款单号 | mchRefundNo | 是 | String(30) | M27210632100491 | 商户生成的退款单号
退款金额 | refundAmount | 是 | int | 100 | 退款金额,单位分
货币代码 | currency | 是 | String(3) | cny | 三位货币代码,人民币:cny
退款原因 | refundReason | 是 | String(64) | 用户退货 | 退款原因
客户端IP | clientIp | 否 | String(32) | 210.73.10.148 | 客户端IPV4地址
异步通知地址 | notifyUrl | 否 | String(128) | https://www.jeequan.com/notify.htm | 退款完成后回调该URL,只有传了该值才会发起回调
渠道参数 | channelExtra | 否 | String(256 | {"auth_code", "13920933111042"} | 特定渠道发起的额外参数,json格式字符串.详见渠道参数说明
扩展参数 | extraParam | 否 | String(512) | 134586944573118714 | 商户扩展参数,回调时会原样返回
请求时间 | reqTime | 是 | long | 1622016572190 | 请求接口时间,13位时间戳
接口版本 | version | 是 | String(3) | 1.0 | 接口版本号,固定:1.0
签名 | sign | 是 | String(32) | C380BEC2BFD727A4B6845133519F3AD6 | 签名值,详见签名算法
签名类型 | signType | 是 | String(32) | MD5 | 签名类型,目前只支持MD5方式
`请求示例数据`
```
json
{
"payOrderId"
:
"P202106181104177050002"
,
"extParam"
:
""
,
"mchOrderNo"
:
""
,
"refundReason"
:
"退款测试"
,
"sign"
:
"2762CDB48D5179281DB6C0995E4EEDE0"
,
"reqTime"
:
"1624007315"
,
"version"
:
"1.0"
,
"channelExtra"
:
""
,
"appId"
:
"60cc09bce4b0f1c0b83761c9"
,
"mchRefundNo"
:
"mho1624007315478"
,
"clientIp"
:
"192.166.1.132"
,
"notifyUrl"
:
"https://www.jeequan.com"
,
"signType"
:
"MD5"
,
"currency"
:
"cny"
,
"mchNo"
:
"M1623984572"
,
"refundAmount"
:
4
}
```
> 返回参数
字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述
------- | -------| -------| -------| -------| -------
返回状态 | code | 是 | int | 0 | 0-处理成功,其他-处理有误,详见错误码
返回信息 | msg | 否 | String(128) | 签名失败 | 具体错误原因,例如:签名失败、参数格式校验错误
签名信息 | sign | 否 | String(32) | CCD9083A6DAD9A2DA9F668C3D4517A84 | 对data内数据签名,如data为空则不返回
返回数据 | data | 否 | String(512) | {} | 返回下单数据,json格式数据
`data数据格式`
字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述
------- | -------| -------| -------| -------| -------
退款订单号 | refundOrderId | 是 | String(30) | R202106181708358940000 | 返回退款订单号
商户退款单号 | mchRefundNo | 是 | String(30) | mho1624007315478 | 返回商户传入的退款单号
退款状态 | state | 是 | int | 2 | 退款状态
<br>
0-订单生成
<br>
1-退款中
<br>
2-退款成功
<br>
3-退款失败
<br>
4-退款关闭
渠道退款单号 | channelOrderNo | 否 | String | 20160427210604000490 | 对应渠道的退款单号
渠道错误码 | errCode | 否 | String | ACQ.PAYMENT_AUTH_CODE_INVALID | 上游渠道返回的错误码
渠道错误描述 | errMsg | 否 | String | Business Failed 失败 | 上游渠道返回的错误描述
`返回示例数据`
```
json
{
"code"
:
0
,
"data"
:
{
"channelOrderNo"
:
"2021061822001423031419593035"
,
"mchRefundNo"
:
"mho1624007315478"
,
"payAmount"
:
58
,
"refundAmount"
:
4
,
"refundOrderId"
:
"R202106181708358940000"
,
"state"
:
2
},
"msg"
:
"SUCCESS"
,
"sign"
:
"2843B811B7A75D56B7D1950362820875"
}
```
## 查询订单
商户通过该接口查询退款订单,支付网关会返回订单最新的数据
> 接口说明
适用对象:
`普通商户`
`特约商户`
请求URL:https://pay.jeepay.vip/api/refund/query
请求方式:
`POST`
请求类型:
`application/json`
或
`application/x-www-form-urlencoded`
> 请求参数
字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述
------- | -------| -------| -------| -------| -------
商户号 | mchNo | 是 | String(30) | M1621873433953 | 商户号
应用ID | appId | 是 | String(24) | 60cc09bce4b0f1c0b83761c9 | 应用ID
退款订单号 | refundOrderId | 是 | String(30) | R20160427210604000490 | 支付中心生成的退款单号,与mchRefundNo二者传一即可
商户退款单号 | mchRefundNo | 是 | String(30) | 20160427210604000490 | 商户生成的退款单号,与refundOrderId二者传一即可
请求时间 | reqTime | 是 | long | 1622016572190 | 请求接口时间,13位时间戳
接口版本 | version | 是 | String(3) | 1.0 | 接口版本号,固定:1.0
签名 | sign | 是 | String(32) | C380BEC2BFD727A4B6845133519F3AD6 | 签名值,详见签名算法
签名类型 | signType | 是 | String(32) | MD5 | 签名类型,目前只支持MD5方式
`请求示例数据`
```
json
{
"refundOrderId"
:
"P202106181105527690009"
,
"appId"
:
"60cc09bce4b0f1c0b83761c9"
,
"sign"
:
"1484293FCAEAFE11DEC8949DB6B525A9"
,
"signType"
:
"MD5"
,
"reqTime"
:
"1624008199"
,
"mchNo"
:
"M1623984572"
,
"version"
:
"1.0"
}
```
字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述
------- | -------| -------| -------| -------| -------
返回状态 | code | 是 | int | 0 | 0-处理成功,其他-处理有误,详见错误码
返回信息 | msg | 否 | String(128) | 签名失败 | 具体错误原因,例如:签名失败、参数格式校验错误
签名信息 | sign | 否 | String(32) | CCD9083A6DAD9A2DA9F668C3D4517A84 | 对data内数据签名,如data为空则不返回
返回数据 | data | 否 | String(512) | {} | 返回下单数据,json格式数据
`data数据格式`
字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述
------- | -------| -------| -------| -------| -------
退款订单号 | refundOrderId | 是 | String(30) | R20160427210604000490 | 支付中心生成的退款单号
支付订单号 | payOrderId | 是 | String(30) | P12021022311124442600 | 返回支付系统订单号
商户号 | mchNo | 是 | String(30) | M1621873433953 | 商户号
应用ID | appId | 是 | String(24) | 60cc09bce4b0f1c0b83761c9 | 应用ID
商户退款单号 | mchRefundNo | 是 | String(30) | 20160427210604000490 | 商户生成的退款单号
支付金额 | payAmount | 是 | int | 100 | 支付金额,单位分
退款金额 | refundAmount | 是 | int | 100 | 退款金额,单位分
货币代码 | currency | 是 | String(3) | cny | 三位货币代码,人民币:cny
退款状态 | state | 是 | int | 2 | 退款状态
<br>
0-订单生成
<br>
1-退款中
<br>
2-退款成功
<br>
3-退款失败
<br>
4-退款关闭
渠道订单号 | channelOrderNo | 否 | String | 20160427210604000490 | 对应渠道的订单号
渠道错误码 | errCode | 否 | String | 1002 | 渠道返回错误码
渠道错误描述 | errMsg | 否 | String | 134586944573118714 | 渠道返回错误描述
扩展参数 | extraParam | 否 | String(512) | 134586944573118714 | 商户扩展参数,回调时会原样返回
创建时间 | createdAt | 是 | long | 1622016572190 | 订单创建时间,13位时间戳
成功时间 | successTime | 否 | long | 1622016572190 | 订单支付成功时间,13位时间戳
`返回示例数据`
```
json
{
"code"
:
0
,
"data"
:
{
"appId"
:
"60cc09bce4b0f1c0b83761c9"
,
"channelOrderNo"
:
"2021061822001423031419593035"
,
"createdAt"
:
1623985552769
,
"currency"
:
"cny"
,
"extParam"
:
""
,
"mchNo"
:
"M1623984572"
,
"mchRefundNo"
:
"mho1623985552430"
,
"payAmount"
:
58
,
"payOrderId"
:
"P202106181104177050002"
,
"refundAmount"
:
4
,
"refundOrderId"
:
"P202106181105527690009"
,
"state"
:
2
,
"successTime"
:
1623985554000
},
"msg"
:
"SUCCESS"
,
"sign"
:
"E3F9F008FC5EF84BD782CCC7BE69DC5E"
}
```
## 退款通知
当退款完成时(成功或失败),支付网关会向商户系统发起回调通知。如果商户系统没有正确返回,支付网关会延迟再次通知。
> 接口说明
适用对象:
`普通商户`
`特约商户`
请求URL:该链接是通过统一退款接口提交的参数notifyUrl设置,如果无法访问链接,商户系统将无法接收到支付中心的通知。
请求方式:
`POST`
请求类型:
`application/x-www-form-urlencoded`
> 通知参数
字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述
------- | -------| -------| -------| -------| -------
退款订单号 | refundOrderId | 是 | String(30) | R20160427210604000490 | 支付中心生成的退款单号
支付订单号 | payOrderId | 是 | String(30) | P12021022311124442600 | 返回支付系统订单号
商户号 | mchNo | 是 | String(30) | M1621873433953 | 商户号
应用ID | appId | 是 | String(24) | 60cc09bce4b0f1c0b83761c9 | 应用ID
商户退款单号 | mchRefundNo | 是 | String(30) | 20160427210604000490 | 商户生成的退款单号
支付金额 | payAmount | 是 | int | 100 | 支付金额,单位分
退款金额 | refundAmount | 是 | int | 100 | 退款金额,单位分
货币代码 | currency | 是 | String(3) | cny | 三位货币代码,人民币:cny
退款状态 | state | 是 | int | 2 | 退款状态
<br>
0-订单生成
<br>
1-退款中
<br>
2-退款成功
<br>
3-退款失败
<br>
4-退款关闭
渠道订单号 | channelOrderNo | 否 | String | 20160427210604000490 | 对应渠道的订单号
渠道错误码 | errCode | 否 | String | 1002 | 渠道返回错误码
渠道错误描述 | errMsg | 否 | String | 134586944573118714 | 渠道返回错误描述
扩展参数 | extraParam | 否 | String(512) | 134586944573118714 | 商户扩展参数,回调时会原样返回
创建时间 | createdAt | 是 | long | 1622016572190 | 订单创建时间,13位时间戳
成功时间 | successTime | 否 | long | 1622016572190 | 订单支付成功时间,13位时间戳
通知请求时间 | reqTime | 是 | String(30) | 1622016572190 | 通知请求时间,,13位时间戳
签名 | sign | 是 | String(32) | C380BEC2BFD727A4B6845133519F3AD6 | 签名值,详见签名算法
>
返回结果
业务系统处理后同步返回给支付中心,返回字符串 success 则表示成功,返回非success则表示处理失败,支付中心会再次通知业务系统。(通知频率为0/30/60/90/120/150,单位:秒)
`注意:返回的字符串必须是小写,且前后不能有空格和换行符。`
`通知示例数据`
```
json
{
"appId"
:
"60cc09bce4b0f1c0b83761c9"
,
"channelOrderNo"
:
"2021061822001423031419593035"
,
"createdAt"
:
1623985552769
,
"currency"
:
"cny"
,
"extParam"
:
""
,
"mchNo"
:
"M1623984572"
,
"mchRefundNo"
:
"mho1623985552430"
,
"payAmount"
:
58
,
"payOrderId"
:
"P202106181104177050002"
,
"refundAmount"
:
4
,
"refundOrderId"
:
"P202106181105527690009"
,
"state"
:
2
,
"successTime"
:
1623985554000
}
```
\ No newline at end of file
jeepay-payment/src/main/resources/markdown/doc/api4.md
0 → 100644
View file @
c007706c
[TOC]
## 发起转账
商户业务系统通过转账接口发起转账申请,Jeepay支付网关将根据请求数据传入到对应的上游接口。
> 接口说明
适用对象:
`普通商户`
`特约商户`
请求URL:https://pay.jeepay.vip/api/transferOrder
请求方式:
`POST`
请求类型:
`application/json`
或
`application/x-www-form-urlencoded`
> 请求参数
字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述
------- | -------| -------| -------| -------| -------
商户号 | mchNo | 是 | String(30) | M1621873433953 | 商户号
应用ID | appId | 是 | String(24) | 60cc09bce4b0f1c0b83761c9 | 应用ID
商户订单号 | mchOrderNo | 是 | String(30) | 20160427210604000490 | 商户生成的转账订单号
接口代码 | ifCode | 是 | String(10) | wxpay | wxpay-微信官方接口 ; alipay-支付宝官方接口
入账方式 | entryType | 是 | String(20) | 20160427210604000490 | 入账方式: WX_CASH-微信零钱; ALIPAY_CASH-支付宝转账; BANK_CARD-银行卡
转账金额 | amount | 是 | int | 100 | 转账金额,单位分
货币代码 | currency | 是 | String(3) | cny | 三位货币代码,人民币:cny
收款账号 | accountNo | 是 | String(64) | o6BcIwvTvIqf1zXZohc61biryWik | wxpay-openID, alipay-登录账号
收款人姓名 | accountName | 否 | String(64) | 张三 | 填入则验证姓名,否则不验证
收款人开户行名称 | bankName | 否 | String(64) | 中国工商银行 | 当前仅作为记录
客户端IP | clientIp | 否 | String(32) | 210.73.10.148 | 客户端IPV4地址
转账备注信息 | transferDesc | 否 | String(128) | 测试转账 | 转账备注信息
异步通知地址 | notifyUrl | 否 | String(128) | https://www.jeequan.com/notify.htm | 转账完成后回调该URL,只有传了该值才会发起回调
渠道参数 | channelExtra | 否 | String(256 | {} | 特定渠道发起的额外参数,json格式字符串
扩展参数 | extraParam | 否 | String(512) | 134586944573118714 | 商户扩展参数,回调时会原样返回
请求时间 | reqTime | 是 | long | 1622016572190 | 请求接口时间,13位时间戳
接口版本 | version | 是 | String(3) | 1.0 | 接口版本号,固定:1.0
签名 | sign | 是 | String(32) | C380BEC2BFD727A4B6845133519F3AD6 | 签名值,详见签名算法
签名类型 | signType | 是 | String(32) | MD5 | 签名类型,目前只支持MD5方式
`请求示例数据`
```
json
{
"ifCode"
:
"wxpay"
,
"entryType"
:
"WX_CASH"
,
"amount"
:
1
,
"accountName"
:
""
,
"mchOrderNo"
:
"mho1629106169045"
,
"sign"
:
"3EB5A3B81E92DB41677E235363E7DDE3"
,
"transferDesc"
:
"测试转账"
,
"reqTime"
:
"1629106169"
,
"version"
:
"1.0"
,
"appId"
:
"60cc3ba74ee0e6685f57eb1e"
,
"accountNo"
:
"a6BcIwtTvIqv1zXZohc61biryWok"
,
"clientIp"
:
"192.166.1.132"
,
"signType"
:
"MD5"
,
"currency"
:
"CNY"
,
"mchNo"
:
"M1623997351"
}
```
> 返回参数
字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述
------- | -------| -------| -------| -------| -------
返回状态 | code | 是 | int | 0 | 0-处理成功,其他-处理有误,详见错误码
返回信息 | msg | 否 | String(128) | 签名失败 | 具体错误原因,例如:签名失败、参数格式校验错误
签名信息 | sign | 否 | String(32) | CCD9083A6DAD9A2DA9F668C3D4517A84 | 对data内数据签名,如data为空则不返回
返回数据 | data | 否 | String(512) | {} | 返回下单数据,json格式数据
`data数据格式`
字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述
------- | -------| -------| -------| -------| -------
转账订单号 | transferId | 是 | String(30) | T202108161731281310004 | 返回转账订单号
商户转账单号 | mchOrderNo | 是 | String(30) | mho1624007315478 | 返回商户传入的转账单号
转账状态 | state | 是 | int | 2 | 转账状态
<br>
0-订单生成
<br>
1-转账中
<br>
2-转账成功
<br>
3-转账失败
<br>
4-转账关闭
渠道转账单号 | channelOrderNo | 否 | String | 20160427210604000490 | 对应渠道的转账单号
渠道错误码 | errCode | 否 | String | ACQ.PAYMENT_AUTH_CODE_INVALID | 上游渠道返回的错误码
渠道错误描述 | errMsg | 否 | String | Business Failed 失败 | 上游渠道返回的错误描述
`返回示例数据`
```
json
{
"code"
:
0
,
"data"
:
{
"accountNo"
:
"1"
,
"amount"
:
11
,
"channelOrderNo"
:
"20210816110070001506260000372216"
,
"mchOrderNo"
:
"1629106288"
,
"state"
:
2
,
"transferId"
:
"T202108161731281310004"
},
"msg"
:
"SUCCESS"
,
"sign"
:
"195BF6F112386F7FC8EA2AA7EECA1D33"
}
```
## 查询订单
商户通过该接口查询转账订单,支付网关会返回订单最新的数据
> 接口说明
适用对象:
`普通商户`
`特约商户`
请求URL:https://pay.jeepay.vip/api/transfer/query
请求方式:
`POST`
请求类型:
`application/json`
或
`application/x-www-form-urlencoded`
> 请求参数
字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述
------- | -------| -------| -------| -------| -------
商户号 | mchNo | 是 | String(30) | M1621873433953 | 商户号
应用ID | appId | 是 | String(24) | 60cc09bce4b0f1c0b83761c9 | 应用ID
转账订单号 | transferId | 是 | String(30) | T20160427210604000490 | 支付中心生成的转账单号,与mchOrderNo二者传一即可
商户转账单号 | mchOrderNo | 是 | String(30) | 20160427210604000490 | 商户生成的转账单号,与transferId二者传一即可
请求时间 | reqTime | 是 | long | 1622016572190 | 请求接口时间,13位时间戳
接口版本 | version | 是 | String(3) | 1.0 | 接口版本号,固定:1.0
签名 | sign | 是 | String(32) | C380BEC2BFD727A4B6845133519F3AD6 | 签名值,详见签名算法
签名类型 | signType | 是 | String(32) | MD5 | 签名类型,目前只支持MD5方式
`请求示例数据`
```
json
{
"appId"
:
"60cc3ba74ee0e6685f57eb1e"
,
"sign"
:
"D3C0CC231F3FC3D033650699BA099B39"
,
"signType"
:
"MD5"
,
"reqTime"
:
"1629106457"
,
"transferId"
:
"T202108121543441860003"
,
"mchNo"
:
"M1623997351"
,
"version"
:
"1.0"
}
```
字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述
------- | -------| -------| -------| -------| -------
返回状态 | code | 是 | int | 0 | 0-处理成功,其他-处理有误,详见错误码
返回信息 | msg | 否 | String(128) | 签名失败 | 具体错误原因,例如:签名失败、参数格式校验错误
签名信息 | sign | 否 | String(32) | CCD9083A6DAD9A2DA9F668C3D4517A84 | 对data内数据签名,如data为空则不返回
返回数据 | data | 否 | String(512) | {} | 返回下单数据,json格式数据
`data数据格式`
字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述
------- | -------| -------| -------| -------| -------
商户号 | mchNo | 是 | String(30) | M1621873433953 | 商户号
应用ID | appId | 是 | String(24) | 60cc09bce4b0f1c0b83761c9 | 应用ID
商户订单号 | mchOrderNo | 是 | String(30) | 20160427210604000490 | 商户生成的转账订单号
转账订单号 | transferId | 是 | String(30) | T20160427210604000490 | 支付中心生成的转账单号
转账金额 | amount | 是 | int | 100 | 转账金额,单位分
货币代码 | currency | 是 | String(3) | cny | 三位货币代码,人民币:cny
接口代码 | ifCode | 是 | String(10) | wxpay | wxpay-微信官方接口 ; alipay-支付宝官方接口
入账方式 | entryType | 是 | String(20) | 20160427210604000490 | 入账方式: WX_CASH-微信零钱; ALIPAY_CASH-支付宝转账; BANK_CARD-银行卡
转账状态 | state | 是 | int | 2 | 转账状态
<br>
0-订单生成
<br>
1-转账中
<br>
2-转账成功
<br>
3-转账失败
<br>
4-转账关闭
收款账号 | accountNo | 是 | String(64) | o6BcIwvTvIqf1zXZohc61biryWik | wxpay-openID, alipay-登录账号
收款人姓名 | accountName | 否 | String(64) | 张三 | 填入则验证姓名,否则不验证
收款人开户行名称 | bankName | 否 | String(64) | 中国工商银行 | 当前仅作为记录
转账备注信息 | transferDesc | 否 | String(128) | 测试转账 | 转账备注信息
渠道转账单号 | channelOrderNo | 否 | String | 20160427210604000490 | 对应渠道的转账单号
渠道错误码 | errCode | 否 | String | 1002 | 渠道返回错误码
渠道错误描述 | errMsg | 否 | String | 134586944573118714 | 渠道返回错误描述
扩展参数 | extraParam | 否 | String(512) | 134586944573118714 | 商户扩展参数,回调时会原样返回
创建时间 | createdAt | 是 | long | 1622016572190 | 订单创建时间,13位时间戳
成功时间 | successTime | 否 | long | 1622016572190 | 转账成功时间,13位时间戳
`返回示例数据`
```
json
{
"code"
:
0
,
"data"
:
{
"accountNo"
:
"o6BcIwvTvIqf1zXZohc61biryWik"
,
"amount"
:
1
,
"appId"
:
"6113805e42020495c62bd4cb"
,
"createdAt"
:
1628818820011
,
"currency"
:
"CNY"
,
"entryType"
:
"WX_CASH"
,
"errCode"
:
"OPENID_ERROR"
,
"errMsg"
:
"openid与商户appid不匹配【openid与商户appid不匹配】"
,
"ifCode"
:
"wxpay"
,
"mchNo"
:
"M1623997351"
,
"mchOrderNo"
:
"1628818820"
,
"state"
:
3
,
"transferDesc"
:
"测试"
,
"transferId"
:
"T202108130940200100001"
},
"msg"
:
"SUCCESS"
,
"sign"
:
"A262DBD3D6182E8A0AEC90EF820F2A5A"
}
```
## 转账通知
当转账完成时(成功或失败),支付网关会向商户系统发起回调通知。如果商户系统没有正确返回,支付网关会延迟再次通知。
> 接口说明
适用对象:
`普通商户`
`特约商户`
请求URL:该链接是通过转账申请接口提交的参数notifyUrl设置,如果无法访问链接,商户系统将无法接收到支付中心的通知。
请求方式:
`POST`
请求类型:
`application/x-www-form-urlencoded`
> 通知参数
字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述
------- | -------| -------| -------| -------| -------
商户号 | mchNo | 是 | String(30) | M1621873433953 | 商户号
应用ID | appId | 是 | String(24) | 60cc09bce4b0f1c0b83761c9 | 应用ID
商户订单号 | mchOrderNo | 是 | String(30) | 20160427210604000490 | 商户生成的转账订单号
转账订单号 | transferId | 是 | String(30) | T20160427210604000490 | 支付中心生成的转账单号
转账金额 | amount | 是 | int | 100 | 转账金额,单位分
货币代码 | currency | 是 | String(3) | cny | 三位货币代码,人民币:cny
接口代码 | ifCode | 是 | String(10) | wxpay | wxpay-微信官方接口 ; alipay-支付宝官方接口
入账方式 | entryType | 是 | String(20) | 20160427210604000490 | 入账方式: WX_CASH-微信零钱; ALIPAY_CASH-支付宝转账; BANK_CARD-银行卡
转账状态 | state | 是 | int | 2 | 转账状态
<br>
0-订单生成
<br>
1-转账中
<br>
2-转账成功
<br>
3-转账失败
<br>
4-转账关闭
收款账号 | accountNo | 是 | String(64) | o6BcIwvTvIqf1zXZohc61biryWik | wxpay-openID, alipay-登录账号
收款人姓名 | accountName | 否 | String(64) | 张三 | 填入则验证姓名,否则不验证
收款人开户行名称 | bankName | 否 | String(64) | 中国工商银行 | 当前仅作为记录
转账备注信息 | transferDesc | 否 | String(128) | 测试转账 | 转账备注信息
渠道转账单号 | channelOrderNo | 否 | String | 20160427210604000490 | 对应渠道的转账单号
渠道错误码 | errCode | 否 | String | 1002 | 渠道返回错误码
渠道错误描述 | errMsg | 否 | String | 134586944573118714 | 渠道返回错误描述
扩展参数 | extraParam | 否 | String(512) | 134586944573118714 | 商户扩展参数,回调时会原样返回
创建时间 | createdAt | 是 | long | 1622016572190 | 订单创建时间,13位时间戳
成功时间 | successTime | 否 | long | 1622016572190 | 转账成功时间,13位时间戳
>
返回结果
业务系统处理后同步返回给支付中心,返回字符串 success 则表示成功,返回非success则表示处理失败,支付中心会再次通知业务系统。(通知频率为0/30/60/90/120/150,单位:秒)
`注意:返回的字符串必须是小写,且前后不能有空格和换行符。`
`通知示例数据`
```
json
{
"accountNo"
:
"o6BcIwvTvIqf1zXZohc61biryWik"
,
"amount"
:
1
,
"appId"
:
"6113805e42020495c62bd4cb"
,
"createdAt"
:
1628818820011
,
"currency"
:
"CNY"
,
"entryType"
:
"WX_CASH"
,
"errCode"
:
"OPENID_ERROR"
,
"errMsg"
:
"openid与商户appid不匹配【openid与商户appid不匹配】"
,
"ifCode"
:
"wxpay"
,
"mchNo"
:
"M1623997351"
,
"mchOrderNo"
:
"1628818820"
,
"state"
:
3
,
"transferDesc"
:
"测试"
,
"transferId"
:
"T202108130940200100001"
}
```
\ No newline at end of file
jeepay-payment/src/main/resources/markdown/doc/api5.md
0 → 100644
View file @
c007706c
[TOC]
## 分账业务
> 业务介绍:商户分账主要用于商户将交易成功的资金,按照一定的周期,分账给其他方,可以是合作伙伴、员工、用户或者其他分润方。
参考微信文档:

微信分账:https://pay.weixin.qq.com/wiki/doc/api/allocation.php?chapter=26_1
支付宝分账: https://opendocs.alipay.com/open/20190308105425129272/intro
接口目录:
## 绑定分账用户
> 接口说明
适用对象:
`普通商户`
`特约商户`
请求URL:https://pay.jeepay.vip/api/division/receiver/bind
请求方式:
`POST`
请求类型:
`application/json`
或
`application/x-www-form-urlencoded`
> 请求参数
字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述
------- | -------| -------| -------| -------| -------
商户号 | mchNo | 是 | String(30) | M1621873433953 | 商户号
应用ID | appId | 是 | String(24) | 60cc09bce4b0f1c0b83761c9 | 应用ID
接口代码 | ifCode | 是 | String(10) | wxpay | wxpay-微信官方接口 ; alipay-支付宝官方接口
接收者账号别名 | receiverAlias | 是 | String(64) | 张三 | 接收者账号别名
组ID | receiverGroupId | 是 | long | 10001 | 需先登录商户系统查找待加入的组ID
分账接收账号类型 | accType | 是 | int | 1 | 分账接收账号类型: 0-个人(对私) 1-商户(对公)
分账接收账号 | accNo | 是 | String(10) | 1231312@qq.com | 分账接收账号, 微信个人是openid, 支付宝可以是userId或登录名
分账接收账号名称 | accName | 否 | String(30) | 张三 | 微信选填(当填入则验证),支付宝账号必填
分账关系类型 | relationType | 是 | String(30) | wxpay | 分账关系类型:
<br/>
SERVICE_PROVIDER:服务商
<br/>
STORE:门店
<br/>
STAFF:员工
<br/>
STORE_OWNER:店主
<br/>
PARTNER:合作伙伴
<br/>
HEADQUARTER:总部
<br/>
BRAND:品牌方
<br/>
DISTRIBUTOR:分销商
<br/>
USER:用户
<br/>
SUPPLIER:供应商
<br/>
CUSTOM:自定义
分账关系类型名称 | relationTypeName | 否 | String(30) | wxpay | 当relationType=CUSTOM 必填
渠道特殊信息 | channelExtInfo | 否 | String(256) | wxpay | 渠道特殊信息
默认分账比例 | divisionProfit | 是 | String(10) | wxpay | 若分账30% 则填入 0.3
请求时间 | reqTime | 是 | long | 1622016572190 | 请求接口时间,13位时间戳
接口版本 | version | 是 | String(3) | 1.0 | 接口版本号,固定:1.0
签名 | sign | 是 | String(32) | C380BEC2BFD727A4B6845133519F3AD6 | 签名值,详见签名算法
签名类型 | signType | 是 | String(32) | MD5 | 签名类型,目前只支持MD5方式
`请求示例数据`
```
json
{
'version':
'
1.0
'
,
'reqTime':
'
1622016572190
'
,
'signType':
'MD
5
'
,
'sign':
'MD
5
MD
5
MD
5
MD
5
MD
5
MD
5
MD
5
MD
5
MD
5
MD
5
MD
5
MD
5
'
,
'mchNo':
'M
1623997000
'
,
'appId':
'
60
cc
3
ba
74
ee
0e6685
f
57e000
'
,
'ifCode':
'wxpay'
,
'receiverAlias':
'我的第一个账号'
,
'receiverGroupId':
'
100001
'
,
'accType':
'
0
'
,
'accNo':
'sfsfsd@qq.com'
,
'accName':
'张三'
,
'relationType':
'OTHERS'
,
'relationTypeName':
'我的员工'
,
'divisionProfit':
'
0.3
'
}
```
> 返回参数
字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述
------- | -------| -------| -------| -------| -------
返回状态 | code | 是 | int | 0 | 0-处理成功,其他-处理有误,详见错误码
返回信息 | msg | 否 | String(128) | 签名失败 | 具体错误原因,例如:签名失败、参数格式校验错误
签名信息 | sign | 否 | String(32) | CCD9083A6DAD9A2DA9F668C3D4517A84 | 对data内数据签名,如data为空则不返回
返回数据 | data | 否 | String(512) | {} | 返回下单数据,json格式数据
`data数据格式`
字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述
------- | -------| -------| -------| -------| -------
绑定账号ID | receiverId | 是 | long | 10001 | 绑定账号ID, 订单分账将使用该ID
接收者账号别名 | receiverAlias | 是 | String(64) | 张三 | 接收者账号别名
组ID | receiverGroupId | 是 | long | 10001 | 组ID
分账接收账号类型 | accType | 是 | int | 1 | 分账接收账号类型: 0-个人(对私) 1-商户(对公)
分账接收账号 | accNo | 是 | String(10) | 1231312@qq.com | 分账接收账号
分账接收账号名称 | accName | 否 | String(30) | 张三 | 分账接收账号名称
分账关系类型 | relationType | 是 | String(30) | wxpay | 分账关系类型
渠道特殊信息 | channelExtInfo | 否 | String(256) | wxpay | 渠道特殊信息
默认分账比例 | divisionProfit | 是 | String(10) | wxpay | 默认分账比例
绑定成功时间 | bindSuccessTime | 是 | Long | 1622016572190 | 绑定成功时间
绑定状态 | bindState | 是 | int | 1 | 绑定状态 1-绑定成功, 0-绑定异常
渠道错误码 | errCode | 否 | String | ACQ.PAYMENT_AUTH_CODE_INVALID | 上游渠道返回的错误码
渠道错误描述 | errMsg | 否 | String | Business Failed 失败 | 上游渠道返回的错误描述
`返回示例数据`
```
json
{
"code"
:
0
,
"data"
:
{
"accName"
:
"张三"
,
"accNo"
:
"sfsfsd@qq.com"
,
"accType"
:
0
,
"appId"
:
"60cc3ba74ee0e6685f57eb1e"
,
"bindState"
:
0
,
"divisionProfit"
:
0.3
,
"errCode"
:
"NOAUTH"
,
"errMsg"
:
"无分账权限"
,
"ifCode"
:
"wxpay"
,
"mchNo"
:
"M1623997351"
,
"receiverAlias"
:
"我的第一个账号"
,
"receiverGroupId"
:
100001
,
"relationType"
:
"OTHERS"
,
"relationTypeName"
:
"我的员工"
},
"msg"
:
"SUCCESS"
,
"sign"
:
"552CB91FA1E1DB378A534B377E4E9403"
}
```
## 发起订单分账
当订单下单时传入的分账模式 divisionMode = 2商户手动分账(解冻商户金额),支持商户手动发起订单分账。
<br>
注意:需要在订单支付完成后(建议1分钟后)调用分账接口。
> 接口说明
适用对象:
`普通商户`
`特约商户`
请求URL:https://pay.jeepay.vip/api/division/exec
请求方式:
`POST`
请求类型:
`application/json`
或
`application/x-www-form-urlencoded`
> 请求参数
字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述
------- | -------| -------| -------| -------| -------
商户号 | mchNo | 是 | String(30) | M1621873433953 | 商户号
应用ID | appId | 是 | String(24) | 60cc09bce4b0f1c0b83761c9 | 应用ID
支付订单号 | payOrderId | 否 | String(30) | P20160427210604000490 | 支付中心生成的支付订单号,与mchOrderNo二者传一即可
商户单号 | mchOrderNo | 否 | String(30) | 20160427210604000490 | 商户生成的支付单号,与payOrderId二者传一即可
是否使用系统配置的自动分账组 | useSysAutoDivisionReceivers | 是 | int | 1 | 是否使用系统配置的自动分账组: 0-否 1-是
分账接收者账号列表 | receivers | 否 | String(512) | [] | 接收者账号列表(JSONArray 转换为字符串类型)
<br/>
仅当useSysAutoDivisionReceivers=0 时该字段值有效。
<br/>
参考:
<br/>
方式1: 按账号纬度
<br/>
[{
<br/>
receiverId: 800001,
<br/>
divisionProfit: 0.1 (若不填入则使用系统默认配置值)
<br/>
}]
<br/>
方式2: 按组纬度
<br/>
[{
<br/>
receiverGroupId: 100001, (该组所有 当前订单的渠道账号并且可用状态的全部参与分账)
<br/>
divisionProfit: 0.1 (每个账号的分账比例, 若不填入则使用系统默认配置值, 建议不填写)
<br/>
}]
请求时间 | reqTime | 是 | long | 1622016572190 | 请求接口时间,13位时间戳
接口版本 | version | 是 | String(3) | 1.0 | 接口版本号,固定:1.0
签名 | sign | 是 | String(32) | C380BEC2BFD727A4B6845133519F3AD6 | 签名值,详见签名算法
签名类型 | signType | 是 | String(32) | MD5 | 签名类型,目前只支持MD5方式
`请求示例数据`
```
json
{
'version':
'
1.0
'
,
'reqTime':
'
1622016572190
'
,
'signType':
'MD
5
'
,
'sign':
'
1
'
,
'mchNo':
'M
1623997351
'
,
'appId':
'
60
cc
3
ba
74
ee
0e6685
f
57
eb
1
e'
,
'payOrderId':
'P
202108271011463510002
'
,
'useSysAutoDivisionReceivers':
'
0
'
,
'receivers':
'
[{
"receiverGroupId"
:
""
,
"receiverId"
:
"800029"
,
"divisionProfit"
:
"0.0001"
},{
"receiverGroupId"
:
""
,
"receiverId"
:
"800028"
,
"divisionProfit"
:
"0.0002"
}]
'
}
```
字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述
------- | -------| -------| -------| -------| -------
返回状态 | code | 是 | int | 0 | 0-处理成功,其他-处理有误,详见错误码
返回信息 | msg | 否 | String(128) | 签名失败 | 具体错误原因,例如:签名失败、参数格式校验错误
签名信息 | sign | 否 | String(32) | CCD9083A6DAD9A2DA9F668C3D4517A84 | 对data内数据签名,如data为空则不返回
返回数据 | data | 否 | String(512) | {} | 返回下单数据,json格式数据
`data数据格式`
字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述
------- | -------| -------| -------| -------| -------
分账状态 | state | 是 | int | 2 | 分账状态 1-分账成功, 2-分账失败
上游分账批次号 | channelBatchOrderId | 否 | String(30) | T20160427210604000490 | 上游分账批次号
渠道错误码 | errCode | 否 | String | 1002 | 渠道返回错误码
渠道错误描述 | errMsg | 否 | String | ERROR | 渠道返回错误描述
`返回示例数据`
```
json
{
"code"
:
0
,
"data"
:
{
"errCode"
:
"unknown-sub-code"
,
"errMsg"
:
"Business Failed【未知的错误码ACQ.ROYALTY_ACCOUNT_NOT_EXIST】"
,
"state"
:
2
},
"msg"
:
"SUCCESS"
,
"sign"
:
"56836E18015DD7E4FAFE45380C0AD098"
}
```
\ No newline at end of file
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment