支付网关增加自定义接口文档

This commit is contained in:
yurong 2023-06-16 17:33:07 +08:00
parent 0627791b31
commit c007706c14
8 changed files with 1274 additions and 0 deletions

View File

@ -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>

View File

@ -0,0 +1,42 @@
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;
}
}

View File

@ -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/*

View File

@ -0,0 +1,48 @@
[TOC]
## 协议规则
传输方式采用HTTP传输(生产环境建议HTTPS)
提交方式:`POST` 或 `GET`
内容类型:`application/json`
字符编码:`UTF-8`
签名算法:`MD5`
## 参数规范
交易金额:默认为人民币交易,单位为分,参数值不能带小数。
时间参数所有涉及时间参数均使用精确到毫秒的13位数值1622016572190。时间戳具体是指从格林尼治时间1970年01月01日00时00分00秒起至现在的毫秒数。
## 签名算法
`签名生成的通用步骤如下`
***第一步:*** 设所有发送或者接收到的数据为集合M将集合M内非空参数值的参数按照参数名ASCII码从小到大排序字典序使用URL键值对的格式即key1=value1&amp;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&amp;clientIp=192.168.0.111&amp;mchOrderNo=P0123456789101&amp;notifyUrl=https://www.baidu.com&amp;platId=1000&amp;reqTime=20190723141000&amp;returnUrl=https://www.baidu.com&amp;version=1.0&amp;key=EWEFD123RGSRETYDFNGFGFGSHDFGH
`签名结果`4A5078DABBCE0D9C4E7668DACB96FF7A
`最终请求支付系统参数`amount=10000&amp;clientIp=192.168.0.111&amp;mchOrderNo=P0123456789101&amp;notifyUrl=https://www.baidu.com&amp;platId=1000&reqTime=20190723141000&amp;returnUrl=https://www.baidu.com&amp;version=1.0&amp;sign=4A5078DABBCE0D9C4E7668DACB96FF7A
&gt; 运营管理平台可以管理商户的私钥
`提示:`签名以及接口调用请使用jeepay官方提供的sdkhttps://gitee.com/jeequan/jeepay-sdk-java

View File

@ -0,0 +1,453 @@
[TOC]
## 统一下单
商户业务系统通过统一下单接口发起支付收款订单Jeepay支付网关会根据商户配置的支付通道路由支付通道完成支付下单。支付网关根据不同的支付方式返回对应的支付参数业务系统使用支付参数发起收款。
> 接口说明
适用对象:`普通商户` `特约商户`
请求URLhttps://pay.jeepay.vip/api/pay/unifiedOrder
请求方式:`POST`
请求类型:`application/json` 或 `application/x-www-form-urlencoded`
> 请求参数
字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述
------- | -------| -------| -------| -------| -------
商户号 | mchNo | 是 | String(30) | M1621873433953 | 商户号
应用ID | appId | 是 | String(24) | 60cc09bce4b0f1c0b83761c9 | 应用ID
商户订单号 | mchOrderNo | 是 | String(30) | 20160427210604000490 | 商户生成的订单号
支付方式 | wayCode | 是 | String(30) | WX_LITE | 支付方式,如微信小程序WX_LITE
支付金额 | amount | 是 | int | 100 | 支付金额,单位分
货币代码 | currency | 是 | String(3) | cny | 三位货币代码,人民币:cny
客户端IP | clientIp | 否 | String(32) | 210.73.10.148 | 客户端IPV4地址
商品标题 | subject | 是 | String(64) | Jeepay商品标题测试 | 商品标题
商品描述 | body | 是 | String(256) | Jeepay商品描述测试 | 商品描述
异步通知地址 | notifyUrl | 否 | String(128) | https://www.jeequan.com/notify.htm | 支付结果异步回调URL,只有传了该值才会发起回调
跳转通知地址 | returnUrl | 否 | String(128) | https://www.jeequan.com/return.htm | 支付结果同步跳转通知URL
失效时间 | expiredTime | 否 | int | 3600 | 订单失效时间,单位秒,默认2小时.订单在(创建时间+失效时间)后失效
渠道参数 | channelExtra | 否 | String(256 | {"auth_code", "13920933111042"} | 特定渠道发起的额外参数,json格式字符串.详见渠道参数说明
分账模式 | divisionMode | 否 | int | 0 | 分账模式: 0-该笔订单不允许分账[默认], 1-支付成功按配置自动完成分账, 2-商户手动分账(解冻商户金额)
扩展参数 | extParam | 否 | String(512) | 134586944573118714 | 商户扩展参数,回调时会原样返回
请求时间 | reqTime | 是 | long | 1622016572190 | 请求接口时间,13位时间戳
接口版本 | version | 是 | String(3) | 1.0 | 接口版本号固定1.0
签名 | sign | 是 | String(32) | C380BEC2BFD727A4B6845133519F3AD6 | 签名值,详见签名算法
签名类型 | signType | 是 | String(32) | MD5 | 签名类型目前只支持MD5方式
`请求示例数据`
```json
{
"amount": 8,
"extParam": "",
"mchOrderNo": "mho1624005107281",
"subject": "商品标题",
"wayCode": "ALI_BAR",
"sign": "84F606FA25A6EC4783BECC08D4FDC681",
"reqTime": "1624005107",
"body": "商品描述",
"version": "1.0",
"channelExtra": "{\"authCode\":\"280812820366966512\"}",
"appId": "60cc09bce4b0f1c0b83761c9",
"clientIp": "192.166.1.132",
"notifyUrl": "https://www.jeequan.com",
"signType": "MD5",
"currency": "cny",
"returnUrl": "",
"mchNo": "M1623984572",
"divisionMode": 1
}
```
> 返回参数
字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述
------- | -------| -------| -------| -------| -------
返回状态 | code | 是 | int | 0 | 0-处理成功,其他-处理有误,详见错误码
返回信息 | msg | 否 | String(128) | 签名失败 | 具体错误原因,例如:签名失败、参数格式校验错误
签名信息 | sign | 否 | String(32) | CCD9083A6DAD9A2DA9F668C3D4517A84 | 对data内数据签名,如data为空则不返回
返回数据 | data | 否 | String(512) | {} | 返回下单数据,json格式数据
`data数据格式`
字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述
------- | -------| -------| -------| -------| -------
支付订单号 | payOrderId | 是 | String(30) | U12021022311124442600 | 返回支付系统订单号
商户订单号 | mchOrderNo | 是 | String(30) | 20160427210604000490 | 返回商户传入的订单号
订单状态 | orderState | 是 | int | 2 | 支付订单状态<br>0-订单生成<br>1-支付中<br>2-支付成功<br>3-支付失败<br>4-已撤销<br>5-已退款<br>6-订单关闭
支付数据类型 | payDataType | 是 | String | payUrl | 支付参数类型<br>payUrl-跳转链接的方式<br>form-表单方式<br>wxapp-微信支付参数(微信公众号,小程序,app支付时)<br>aliapp-支付宝app支付参数<br>ysfapp-云闪付app支付参数<br>codeUrl-二维码地址<br>codeImgUrl-二维码图片地址<br>none-空支付参数
支付数据 | payData | 否 | String | http://www.jeequan.com/pay.html | 发起支付用到的支付参数,如果微信公众号支付等
渠道错误码 | errCode | 否 | String | ACQ.PAYMENT_AUTH_CODE_INVALID | 上游渠道返回的错误码
渠道错误描述 | errMsg | 否 | String | Business Failed 失败 | 上游渠道返回的错误描述
`返回示例数据`
```json
{
"code": 0,
"data": {
"errCode": "ACQ.PAYMENT_AUTH_CODE_INVALID",
"errMsg": "Business Failed【支付失败获取顾客账户信息失败请顾客刷新付款码后重新收款如再次收款失败请联系管理员处理。[SOUNDWAVE_PARSER_FAIL]】",
"mchOrderNo": "mho1624005752661",
"orderState": 3,
"payOrderId": "P202106181642329900002"
},
"msg": "SUCCESS",
"sign": "F4DA202C516D1F33A12F1E547C5004FD"
}
```
> 支付方式
WayCode | 支付方式
------- | -------
QR_CASHIER | 聚合扫码(用户扫商家)
AUTO_BAR | 聚合条码(商家扫用户)
ALI_BAR | 支付宝条码
ALI_JSAPI | 支付宝生活号
ALI_APP | 支付宝APP
ALI_WAP | 支付宝WAP
ALI_PC | 支付宝PC网站
ALI_QR | 支付宝二维码
WX_BAR | 微信条码
WX_JSAPI | 微信公众号
WX_LITE | 微信小程序
WX_APP | 微信APP
WX_H5 | 微信H5
WX_NATIVE | 微信扫码
YSF_BAR | 云闪付条码
YSF_JSAPI | 云闪付jsapi
> channelExtra参数说明
`wayCode=AUTO_BAR``wayCode=ALI_BAR``wayCode=WX_BAR``wayCode=YSF_BAR`channelExtra必须传auth_code为用户的付款码值channelExtra示例数据如
```json
{"auth_code": "13920933111042"}
```
`wayCode=ALI_JSAPI`channelExtra必须传buyerUserId为支付宝用户IDchannelExtra示例数据如
```json
{"buyerUserId": "2088702585070844"}
```
`wayCode=WX_JSAPI``wayCode=WX_LITE`channelExtra必须传openidchannelExtra示例数据如
```json
{"openid": "o6BcIwvSiRpfS8e_UyfQNrYuk2LI"}
```
`wayCode=QR_CASHIER``wayCode=ALI_QR``wayCode=WX_NATIVE`channelExtra可以传payDataType设置返回支付数据支付类型。此时payDataType可以为codeUrl-二维码地址,codeImgUrl-二维码图片地址不传payDataType默认返回codeUrl类型, channelExtra示例数据如
```json
{"payDataType": "codeImgUrl"}
```
`wayCode=ALI_WAP`channelExtra可以传payDataType设置返回支付数据支付类型。此时payDataType可以为form-返回自动跳转的支付表单,codeImgUrl-返回一个二维码图片URL,payUrl-返回支付链接不传payDataType默认返回payUrl类型, channelExtra示例数据如
```json
{"payDataType": "form"}
```
`wayCode=ALI_PC`channelExtra可以传payDataType设置返回支付数据支付类型。此时payDataType可以为form-返回自动跳转的支付表单,payUrl-返回支付链接不传payDataType默认返回payUrl类型, channelExtra示例数据如
```json
{"payDataType": "form"}
```
## 查询订单
商户通过该接口查询订单,支付网关会返回订单最新的数据
> 接口说明
适用对象:`普通商户` `特约商户`
请求URLhttps://pay.jeepay.vip/api/pay/query
请求方式:`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二者传一即可
请求时间 | reqTime | 是 | long | 1622016572190 | 请求接口时间,13位时间戳
接口版本 | version | 是 | String(3) | 1.0 | 接口版本号固定1.0
签名 | sign | 是 | String(32) | C380BEC2BFD727A4B6845133519F3AD6 | 签名值,详见签名算法
签名类型 | signType | 是 | String(32) | MD5 | 签名类型目前只支持MD5方式
`请求示例数据`
```json
{
"payOrderId": "P202106181104177050002",
"appId": "60cc09bce4b0f1c0b83761c9",
"sign": "46940C58B2F3AE426B77A297ABF4D31E",
"signType": "MD5",
"reqTime": "1624006009",
"mchNo": "M1623984572",
"version": "1.0"
}
```
字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述
------- | -------| -------| -------| -------| -------
返回状态 | code | 是 | int | 0 | 0-处理成功,其他-处理有误,详见错误码
返回信息 | msg | 否 | String(128) | 签名失败 | 具体错误原因,例如:签名失败、参数格式校验错误
签名信息 | sign | 否 | String(32) | CCD9083A6DAD9A2DA9F668C3D4517A84 | 对data内数据签名,如data为空则不返回
返回数据 | data | 否 | String(512) | {} | 返回下单数据,json格式数据
`data数据格式`
字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述
------- | -------| -------| -------| -------| -------
支付订单号 | payOrderId | 是 | String(30) | P12021022311124442600 | 返回支付系统订单号
商户号 | mchNo | 是 | String(30) | M1621873433953 | 商户号
应用ID | appId | 是 | String(24) | 60cc09bce4b0f1c0b83761c9 | 应用ID
商户订单号 | mchOrderNo | 是 | String(30) | 20160427210604000490 | 返回商户传入的订单号
支付接口 | ifCode | 是 | String(30) | wxpay | 支付接口编码
支付方式 | wayCode | 是 | String(30) | WX_LITE | 支付方式,如微信小程序WX_LITE
支付金额 | amount | 是 | int | 100 | 支付金额,单位分
货币代码 | currency | 是 | String(3) | cny | 三位货币代码,人民币:cny
订单状态 | state | 是 | int | 2 | 支付订单状态<br>0-订单生成<br>1-支付中<br>2-支付成功<br>3-支付失败<br>4-已撤销<br>5-已退款<br>6-订单关闭
客户端IP | clientIp | 否 | String(32) | 210.73.10.148 | 客户端IPV4地址
商品标题 | subject | 是 | String(64) | Jeepay商品标题测试 | 商品标题
商品描述 | body | 是 | String(256) | Jeepay商品描述测试 | 商品描述
渠道订单号 | channelOrderNo | 否 | String | 20160427210604000490 | 对应渠道的订单号
渠道错误码 | errCode | 否 | String | 1002 | 渠道下单返回错误码
渠道错误描述 | errMsg | 否 | String | 业务异常错误 | 渠道下单返回错误描述
扩展参数 | extParam | 否 | String(512) | 134586944573118714 | 商户扩展参数,回调时会原样返回
创建时间 | createdAt | 是 | long | 1622016572190 | 订单创建时间,13位时间戳
成功时间 | successTime | 否 | long | 1622016572190 | 订单支付成功时间,13位时间戳
`返回示例数据`
```json
{
"code": 0,
"data": {
"amount": 58,
"appId": "60cc09bce4b0f1c0b83761c9",
"body": "商品描述",
"channelOrderNo": "2021061822001423031419593035",
"clientIp": "192.166.1.132",
"createdAt": 1623985457705,
"currency": "cny",
"extParam": "",
"ifCode": "alipay",
"mchNo": "M1623984572",
"mchOrderNo": "mho1623985457320",
"payOrderId": "P202106181104177050002",
"state": 2,
"subject": "商品标题",
"successTime": 1623985459000,
"wayCode": "ALI_BAR"
},
"msg": "SUCCESS",
"sign": "9548145EA12D0CD8C1628BCF44E19E0D"
}
```
## 关闭订单
商户通过该接口关闭订单,支付网关会对订单完成关闭处理。
> 接口说明
适用对象:`普通商户` `特约商户`
请求URLhttps://pay.jeepay.vip/api/pay/close
请求方式:`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二者传一即可
请求时间 | reqTime | 是 | long | 1622016572190 | 请求接口时间,13位时间戳
接口版本 | version | 是 | String(3) | 1.0 | 接口版本号固定1.0
签名 | sign | 是 | String(32) | C380BEC2BFD727A4B6845133519F3AD6 | 签名值,详见签名算法
签名类型 | signType | 是 | String(32) | MD5 | 签名类型目前只支持MD5方式
`请求示例数据`
```json
{
"payOrderId": "P202106181104177050002",
"appId": "60cc09bce4b0f1c0b83761c9",
"sign": "46940C58B2F3AE426B77A297ABF4D31E",
"signType": "MD5",
"reqTime": "1624006009",
"mchNo": "M1623984572",
"version": "1.0"
}
```
字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述
------- | -------| -------| -------| -------| -------
返回状态 | code | 是 | int | 0 | 0-处理成功,其他-处理有误,详见错误码
返回信息 | msg | 否 | String(128) | 签名失败 | 具体错误原因,例如:签名失败、参数格式校验错误
签名信息 | sign | 否 | String(32) | CCD9083A6DAD9A2DA9F668C3D4517A84 | 对data内数据签名,如data为空则不返回
返回数据 | data | 否 | String(512) | {} | 返回下单数据,json格式数据
`data数据格式`
字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述
------- | -------| -------| -------| -------| -------
渠道错误码 | errCode | 否 | String | 1002 | 渠道关单返回错误码
渠道错误描述 | errMsg | 否 | String | 关闭异常 | 渠道关单返回错误描述
`返回示例数据`
```json
{
"code": 0,
"data": {
"errCode": '',
"errMsg": ''
},
"msg": "SUCCESS",
"sign": "9548145EA12D0CD8C1628BCF44E19E0D"
}
```
## 支付通知
当订单支付成功时,支付网关会向商户系统发起回调通知。如果商户系统没有正确返回,支付网关会延迟再次通知。
> 接口说明
适用对象:`普通商户` `特约商户`
请求URL该链接是通过统一下单接口提交的参数notifyUrl设置如果无法访问链接商户系统将无法接收到支付中心的通知。
请求方式:`POST`
请求类型:`application/x-www-form-urlencoded`
> 通知参数
字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述
------- | -------| -------| -------| -------| -------
支付订单号 | payOrderId | 是 | String(30) | P12021022311124442600 | 返回支付系统订单号
商户号 | mchNo | 是 | String(30) | M1621873433953 | 商户号
应用ID | appId | 是 | String(24) | 60cc09bce4b0f1c0b83761c9 | 应用ID
商户订单号 | mchOrderNo | 是 | String(30) | 20160427210604000490 | 返回商户传入的订单号
支付接口 | ifCode | 是 | String(30) | wxpay | 支付接口编码
支付方式 | wayCode | 是 | String(30) | WX_LITE | 支付方式,微信小程序WX_LITE
支付金额 | amount | 是 | int | 100 | 支付金额,单位分
货币代码 | currency | 是 | String(3) | cny | 三位货币代码,人民币:cny
订单状态 | state | 是 | int | 2 | 支付订单状态<br>0-订单生成<br>1-支付中<br>2-支付成功<br>3-支付失败<br>4-已撤销<br>5-已退款<br>6-订单关闭
客户端IP | clientIp | 否 | String(32) | 210.73.10.148 | 客户端IPV4地址
商品标题 | subject | 是 | String(64) | Jeepay商品标题测试 | 商品标题
商品描述 | body | 是 | String(256) | Jeepay商品描述测试 | 商品描述
渠道订单号 | channelOrderNo | 否 | String | 20160427210604000490 | 对应渠道的订单号
渠道错误码 | errCode | 否 | String | 1002 | 渠道下单返回错误码
渠道错误描述 | errMsg | 否 | String | 134586944573118714 | 渠道下单返回错误描述
扩展参数 | extParam | 否 | String(512) | 134586944573118714 | 商户扩展参数
创建时间 | createdAt | 是 | long | 1622016572190 | 订单创建时间,13位时间戳
成功时间 | successTime | 否 | long | 1622016572190 | 订单支付成功时间,13位时间戳
通知请求时间 | reqTime | 是 | String(30) | 1622016572190 | 通知请求时间,,13位时间戳
签名 | sign | 是 | String(32) | C380BEC2BFD727A4B6845133519F3AD6 | 签名值,详见签名算法
&gt; 返回结果
业务系统处理后同步返回给支付中心,返回字符串 success 则表示成功返回非success则表示处理失败支付中心会再次通知业务系统。通知频率为0/30/60/90/120/150,单位:秒)
`注意:返回的字符串必须是小写,且前后不能有空格和换行符。`
`通知示例数据`
```json
{
"amount": 5,
"body": "商品描述",
"clientIp": "192.166.1.132",
"createdAt": "1622016572190",
"currency": "cny",
"extParam": "",
"ifCode": "wxpay",
"mchNo": "M1621873433953",
"appId": "60cc09bce4b0f1c0b83761c9",
"mchOrderNo": "mho1621934803068",
"payOrderId": "20210525172643357010",
"state": 3,
"subject": "商品标题",
"wayCode": "WX_BAR",
"sign": "C380BEC2BFD727A4B6845133519F3AD6"
}
```
## 获取渠道用户ID
商户通过该接口获取渠道的用户ID如微信的openID支付宝的userId。该接口通过跳转获取到用户ID后会跳转到商户上传的redirectUrl地址并传递用户ID参数
> 接口说明
适用对象:`普通商户` `特约商户`
请求URLhttps://pay.jeepay.vip/api/channelUserId/jump
请求方式:`GET`
请求类型:`application/json` 或 `application/x-www-form-urlencoded`
> 请求参数
字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述
------- | -------| -------| -------| -------| -------
商户号 | mchNo | 是 | String(30) | M1621873433953 | 商户号
应用ID | appId | 是 | String(24) | 60cc09bce4b0f1c0b83761c9 | 应用ID
支付接口 | ifCode | 是 | String(30) | AUTO | 目前只支持传 AUTO
跳转地址 | redirectUrl | 是 | String | https://www.jeequan.com | 获取到用户ID后会携带用户ID参数跳转到该地址
请求时间 | reqTime | 是 | long | 1622016572190 | 请求接口时间,13位时间戳
接口版本 | version | 是 | String(3) | 1.0 | 接口版本号固定1.0
签名 | sign | 是 | String(32) | C380BEC2BFD727A4B6845133519F3AD6 | 签名值,详见签名算法
签名类型 | signType | 是 | String(32) | MD5 | 签名类型目前只支持MD5方式
`请求示例数据`
```json
{
"mchNo": "M1621873433953",
"appId": "60cc09bce4b0f1c0b83761c9",
"ifCode": "wxpay",
"redirectUrl": "https://www.jeequan.com",
"sign": "A5C93D50743126ED91AA6ED96CDEEEF8",
"signType": "MD5",
"reqTime": "1622011236571",
"version": "1.0"
}
```
`当获取到渠道用户ID后会301重定向到跳转地址传递参数如下`
字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述
------- | -------| -------| -------| -------| -------
渠道用户ID | channelUserId | 是 | String | o6BcIwvSiRpfS8e_UyfQNrYuk2LI | 渠道用户ID微信openId或支付宝userId
`完整跳转URL示例`
```html
https://www.jeequan.com/toU?channelUserId=o6BcIwvSiRpfS8e_UyfQNrYuk2LI
```
## 返回码
code | 描述
------- | -------
0 | 成功
9999 | 异常具体错误详见msg字段

View File

@ -0,0 +1,253 @@
[TOC]
## 统一退款
商户业务系统通过统一退款接口发起退款请求Jeepay支付网关会根据商户发起的支付订单号找到对应到支付通道发起退款。
> 接口说明
适用对象:`普通商户` `特约商户`
请求URLhttps://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"
}
```
## 查询订单
商户通过该接口查询退款订单,支付网关会返回订单最新的数据
> 接口说明
适用对象:`普通商户` `特约商户`
请求URLhttps://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 | 签名值,详见签名算法
&gt; 返回结果
业务系统处理后同步返回给支付中心,返回字符串 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
}
```

View File

@ -0,0 +1,263 @@
[TOC]
## 发起转账
商户业务系统通过转账接口发起转账申请Jeepay支付网关将根据请求数据传入到对应的上游接口。
> 接口说明
适用对象:`普通商户` `特约商户`
请求URLhttps://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"
}
```
## 查询订单
商户通过该接口查询转账订单,支付网关会返回订单最新的数据
> 接口说明
适用对象:`普通商户` `特约商户`
请求URLhttps://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位时间戳
&gt; 返回结果
业务系统处理后同步返回给支付中心,返回字符串 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"
}
```

View File

@ -0,0 +1,201 @@
[TOC]
## 分账业务
> 业务介绍:商户分账主要用于商户将交易成功的资金,按照一定的周期,分账给其他方,可以是合作伙伴、员工、用户或者其他分润方。
参考微信文档:
![](/uploads/jeepay/images/m_59fa8b27a5c30a556210fc3d3bd1ad14_r.png)
微信分账https://pay.weixin.qq.com/wiki/doc/api/allocation.php?chapter=26_1
支付宝分账: https://opendocs.alipay.com/open/20190308105425129272/intro
接口目录:
## 绑定分账用户
> 接口说明
适用对象:`普通商户` `特约商户`
请求URLhttps://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': 'MD5',
'sign': 'MD5MD5MD5MD5MD5MD5MD5MD5MD5MD5MD5MD5',
'mchNo': 'M1623997000',
'appId': '60cc3ba74ee0e6685f57e000',
'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分钟后调用分账接口。
> 接口说明
适用对象:`普通商户` `特约商户`
请求URLhttps://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': 'MD5',
'sign': '1',
'mchNo': 'M1623997351',
'appId': '60cc3ba74ee0e6685f57eb1e',
'payOrderId': 'P202108271011463510002',
'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"
}
```