更新日志
暂无更新日志记录
FAQ
暂无常见问题解答
签名规则
为了确保数据在传输过程中不被篡改,系统要求您对支付参数数据进行签名,并将数据签名随同支付请求一起上送
MD5签名
- 系统所有接口签名方式都为MD5,具体的签名字段可参考每个接口的签名(sign)参数备注
- 验证签名,您可对字符串123456进行MD5签名,签名结果得到字符串E10ADC3949BA59ABBE56E057F20F883E,即可认为签名正确
- 签名规则:把所需要参与签名的字段按照给定的顺序进行拼接,然后进行MD5签名,把签名之后的字符串全部转换为大写
- 商户密钥在商户注册成功并审核通过之后再商户后台可获取到
支付接口
支付
业务流程
2D支付流程
1、商户使用本接口文档提供的接口参数发起支付请求到Tapxyz系统
2、Tapxyz系统收到商户发起的支付请求后,进行一系列配置校验和风险控制校验之后上送到通道方完成授权处理
3、Tapxyz收到通道方返回支付结果后再同步返回到商户系统
4、商户系统根据收到的支付结果处理相关业务
3D支付流程
1、商户使用本接口文档提供的接口参数发起支付请求到Tapxyz系统
2、Tapxyz系统收到商户发起的支付请求后,进行一系列配置校验和风险控制校验之后上送到通道方完成授权处理
3、Tapxyz收到通道方返回的支付链接地址后同步返回到商户系统
4、商户系统需重定向到该支付链接地址让用户进行3DS授权认证
5、用户3DS认证通过之后Tapxyz系统会收到通道方的支付结果通知,同时页面会跳转到商户发起支付请求中的returnUrl地址页面
6、Tapxyz收到支付结果通知之后会同步通道到商户系统
7、商户系统根据收到的支付结果处理相关业务
8、如果用户在30分钟内都没有进行3DS授权认证,则订单支付超时不能再进行3DS授权认证
收银台模式支付流程
1、商户使用本接口文档提供的接口参数发起支付请求到Tapxyz系统
2、Tapxyz系统收到商户发起的支付请求后,进行一系列配置校验和风险控制校验之后上送到通道方完成授权处理
3、Tapxyz收到通道方返回的支付链接地址后同步返回到商户系统
4、商户系统需重定向到该支付链接地址填写卡号等信息
5、提交通过之后Tapxyz系统会收到通道方的支付结果通知,同时页面会跳转到商户发起支付请求中的returnUrl地址页面
6、Tapxyz收到支付结果通知之后会同步通道到商户系统
7、商户系统根据收到的支付结果处理相关业务
消费直连模式
请求参数
- 接口地址:
- 生产:https://pay.tapxyz.com/payment
- 请求方式:POST
- 请求头:Content-Type:application/json
- 请求头参数:
参数名 | 必填 | 类型 | 说明 | 长度 | 备注 |
---|---|---|---|---|---|
paymentType | 是 | String | 支付方式 | 15 | 默认不填为信用卡支付 银联h5:UNIONPAY_H5 微信:WECHAT 支付宝:ALIPAY |
- body参数:
body参数
{
"merNo": 123455,
"merOrderNo": "1641972507000",
"currencyCode": "CNY",
"sourceAmount": "100.05",
"returnUrl": "http://baidu.com",
"sign": "9D6FDF4880B00B002B1F2AB61AE9A721",
"cardNo": "6011200081728932",
"cardExpireMonth": "06",
"cardExpireYear": "2020",
"cardSecurityCode": "361",
"billingFirstName": "三",
"billingLastName": "张",
"billingAddress1": "东方明珠",
"billingCity": "上海",
"billingState": "上海",
"billingCountry": "CN",
"billingZipCode": "200000",
"billingPhone": "13688888888",
"shippingFirstName": "三",
"shippingLastName": "张",
"shippingAddress1": "东方明珠",
"shippingCity": "上海",
"shippingState": "上海",
"shippingCountry": "CN",
"shippingZipCode": "200000",
"shippingPhone": "13688888888",
"userAgent": "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/6.0)",
"ipAddress": "116.235.134.86",
"version": "V3.0.0",
"userId": "329627618558021",
"email": "xxxx@gamil.com",
"osType": "ANDROID",
"terminal":"WAP",
"productInfoList": [
{
"sku": "1",
"productName": "mac pro",
"price": "12000",
"quantity": "1"
},
{
"sku": "2",
"productName": "iphone13",
"price": "8000",
"quantity": "1"
}
]
}
参数名 | 必填 | 类型 | 说明 | 长度 | 备注 |
---|---|---|---|---|---|
merNo | 是 | Integer | 商户号 | 10 | 可在商户后台注册获取 |
merOrderNo | 是 | String | 商户订单号 | 32 | 每次下单时必须保持唯一,且每个商户订单号在1秒内只能提交一次 |
currencyCode | 是 | String | 币种 | 3 | |
sourceAmount | 是 | String | 金额 | 12 | 保留两位小数 |
returnUrl | 是 | String | 支付完成后的跳转地址 | 512 | |
notifyUrl | 否 | String | 异步通知地址 | 512 | 3D或者收银台模式或银联,支付宝,微信,支付时用来接收Tapxyz向商户推送支付结果 |
sign | 是 | String | 签名 | 32 | (merNo、merOrderNo、currencyCode、sourceAmount、Merchant key) 详细参照: 签名 |
cardNo | 是 | String | 卡号 | 16 | 收银台模式下可以为空,银联,支付宝,微信模式下可以为空 |
cardExpireMonth | 是 | String | 卡有效期(月) | 2 | 收银台模式下可以为空,银联,支付宝,微信模式下可以为空 |
cardExpireYear | 是 | String | 卡有效期(年) | 4 | 收银台模式下可以为空,银联,支付宝,微信模式下可以为空 |
cardSecurityCode | 是 | String | 卡CVV2/CSC | 3 | 收银台模式下可以为空,银联,支付宝,微信模式下可以为空 |
billingFirstName | 是 | String | 账单人(名) | 50 | 银联,支付宝,微信模式下可以为空 |
billingLastName | 是 | String | 账单人(姓) | 50 | 银联,支付宝,微信模式下可以为空 |
billingAddress1 | 是 | String | 账单地址1 | 128 | 银联,支付宝,微信模式下可以为空 |
billingAddress2 | 否 | String | 账单地址2 | 128 | 银联,支付宝,微信模式下可以为空 |
billingCity | 是 | String | 账单城市 | 100 | 银联,支付宝,微信模式下可以为空 |
billingState | 是 | String | 账单州/省 | 100 | 银联,支付宝,微信模式下可以为空 |
billingCountry | 是 | String | 账单国家编码 | 2 | 参考国家编码表,银联,支付宝,微信模式下可以为空 |
billingZipCode | 是 | String | 账单邮编 | 20 | 银联,支付宝,微信模式下可以为空 |
billingPhone | 是 | String | 账单电话 | 20 | 银联,支付宝,微信模式下可以为空 |
billingEmail | 是 | String | 账单邮箱 | 100 | 银联,支付宝,微信模式下可以为空 |
shippingFirstName | 是 | String | 送货人(名) | 50 | 银联,支付宝,微信模式下可以为空 |
shippingLastName | 是 | String | 送货人(姓) | 50 | 银联,支付宝,微信模式下可以为空 |
shippingAddress1 | 是 | String | 送货地址1 | 128 | 银联,支付宝,微信模式下可以为空 |
shippingAddress2 | 否 | String | 送货地址2 | 128 | 银联,支付宝,微信模式下可以为空 |
shippingCity | 是 | String | 送货城市 | 100 | 银联,支付宝,微信模式下可以为空 |
shippingState | 是 | String | 送货州/省 | 100 | 银联,支付宝,微信模式下可以为空 |
shippingCountry | 是 | String | 送货国家编码 | 2 | 参考国家编码表,银联,支付宝,微信模式下可以为空 |
shippingZipCode | 是 | String | 送货邮编 | 20 | 银联,支付宝,微信模式下可以为空 |
shippingPhone | 是 | String | 送货电话 | 20 | 银联,支付宝,微信模式下可以为空 |
shippingEmail | 是 | String | 送货邮箱 | 100 | 银联,支付宝,微信模式下可以为空 |
userAgent | 是 | String | 持卡人浏览器UserAgent | 128 | 收银台模式下可以为空,银联,支付宝,微信模式下可以为空 |
ipAddress | 是 | String | 持卡人IP地址 | 64 | |
productInfoList | 是 | List |
商品列表 | 1000 | 银联,支付宝,微信模式下可以为空 |
version | 是 | String | 版本号 | 6 | 默认:V3.0.0 |
userId | 否 | String | 用户唯一标识 | 255 | 虚拟产品客户需要填写该参数 |
否 | String | 邮箱 | 255 | 虚拟产品客户需要填写该参数 | |
osType | No | String | 手机类型 | 255 | IOS 或 ANDROID |
terminal | No | String | 设备 | 255 | WEB: 在pc上使用。WAP: 在手机浏览器上使用. APP: 在app中使用.MINI_APP:在小程序中使用. |
- 商品列表里的商品参数
参数名 | 必填 | 类型 | 说明 | 长度 | 备注 |
---|---|---|---|---|---|
sku | 是 | String | 商品编号 | 64 | |
productName | 是 | String | 商品名称 | 128 | |
price | 是 | String | 商品单价 | 16 | |
quantity | 是 | String | 商品数量 | 16 |
请求示例
public class Test{
public static void main(String[] args){
JSONObject jsonObject = new JSONObject();
jsonObject.put("merNo", "123455");
jsonObject.put("merOrderNo", "1641972507000");
jsonObject.put("currencyCode", "CNY");
//.....除签名(sign)以外的所有的body参数
//签名
String sign = MD5(merNo+merOrderNo+currencyCode+sourceAmount+商户密钥);
jsonObject.put("sign", sign.toUpperCase());
String url = "https://pay.tapxyz.com/payment";
HttpResponse httpResponse = HttpRequest.post(url)
.body(jsonObject.toJSONString(), "application/json")
.execute();
int status = httpResponse.getStatus();
if(status == HttpStatus.HTTP_OK){
String content = httpResponse.body();
}
//银联示例
HttpResponse httpResponse = HttpRequest.post(url)
.header("paymentType", "UNIONPAY-H5")
.body(jsonObject.toJSONString(), "application/json")
.execute();
int status = httpResponse.getStatus();
if(status == HttpStatus.HTTP_OK){
String content = httpResponse.body();
}
}
}
响应参数
响应成功示例
{
"code": "00000",
"message": "SUCCESS",
"data": {
"payCode": 0,
"tradeNo": "SN2201111806024151",
"merOrderNo": "1641972507000",
"payUrl": "http://abc.com/notify"
}
}
响应失败示例
{
"code": "10004",
"message": "商户号不存在"
}
参数名 | 必填 | 类型 | 说明 |
---|---|---|---|
code | 是 | String | 错误码(参考错误码表) |
message | 是 | String | 错误描述 |
data | 否 | T | 请求响应数据 |
- 响应数据参数
参数名 | 必填 | 类型 | 说明 |
---|---|---|---|
tradeNo | 是 | String | 交易流水号 |
payCode | 是 | Integer | 支付状态码(0:支付成功 1:支付失败 2:支付处理中 |
payUrl | 否 | String | 3D或者收银台模式下支付时该参数为必填项(需商户重定向到该链接),银联H5支付(重定向到该链接),微信模式(重定向到该链接) 支付宝支付(重定向到该链接) |
merOrderNo | 是 | String | 商户订单号 |
收银台模式
请求参数
- 接口地址:
- 生产:https://pay.tapxyz.com/cashier/checkStand
- 请求方式:POST
请求头:Content-Type:application/json
body参数:
body参数
{
"merNo": 123455,
"merOrderNo": "1641972507000",
"currencyCode": "CNY",
"sourceAmount": "100.05",
"returnUrl": "http://baidu.com",
"sign": "9D6FDF4880B00B002B1F2AB61AE9A721",
"billingFirstName": "三",
"billingLastName": "张",
"billingAddress1": "东方明珠",
"billingCity": "上海",
"billingState": "上海",
"billingCountry": "CN",
"billingZipCode": "200000",
"billingPhone": "13688888888",
"shippingFirstName": "三",
"shippingLastName": "张",
"shippingAddress1": "东方明珠",
"shippingCity": "上海",
"shippingState": "上海",
"shippingCountry": "CN",
"shippingZipCode": "200000",
"shippingPhone": "13688888888",
"userAgent": "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/6.0)",
"ipAddress": "116.235.134.86",
"version": "V3.0.0",
"productInfoList": [
{
"sku": "1",
"productName": "mac pro",
"price": "12000",
"quantity": "1"
},
{
"sku": "2",
"productName": "iphone13",
"price": "8000",
"quantity": "1"
}
]
}
参数名 | 必填 | 类型 | 说明 | 长度 | 备注 |
---|---|---|---|---|---|
merNo | 是 | Integer | 商户号 | 10 | 可在商户后台注册获取 |
merOrderNo | 是 | String | 商户订单号 | 32 | 每次下单时必须保持唯一,且每个商户订单号在1秒内只能提交一次 |
currencyCode | 是 | String | 币种 | 3 | |
sourceAmount | 是 | String | 金额 | 12 | 保留两位小数 |
returnUrl | 是 | String | 支付完成后的跳转地址 | 512 | |
notifyUrl | 否 | String | 异步通知地址 | 512 | 支付时用来接收Tapxyz向商户推送支付结果 |
sign | 是 | String | 签名 | 32 | (merNo、merOrderNo、currencyCode、sourceAmount、Merchant key) 详细参照: 签名 |
billingFirstName | 是 | String | 账单人(名) | 50 | |
billingLastName | 是 | String | 账单人(姓) | 50 | |
billingAddress1 | 是 | String | 账单地址1 | 128 | |
billingAddress2 | 否 | String | 账单地址2 | 128 | |
billingCity | 是 | String | 账单城市 | 100 | |
billingState | 是 | String | 账单州/省 | 100 | |
billingCountry | 是 | String | 账单国家编码 | 2 | 参考国家编码表 |
billingZipCode | 是 | String | 账单邮编 | 20 | |
billingPhone | 是 | String | 账单电话 | 20 | |
billingEmail | 是 | String | 账单邮箱 | 100 | |
shippingFirstName | 是 | String | 送货人(名) | 50 | |
shippingLastName | 是 | String | 送货人(姓) | 50 | |
shippingAddress1 | 是 | String | 送货地址1 | 128 | |
shippingAddress2 | 否 | String | 送货地址2 | 128 | |
shippingCity | 是 | String | 送货城市 | 100 | |
shippingState | 是 | String | 送货州/省 | 100 | |
shippingCountry | 是 | String | 送货国家编码 | 2 | 参考国家编码表 |
shippingZipCode | 是 | String | 送货邮编 | 20 | |
shippingPhone | 是 | String | 送货电话 | 20 | |
shippingEmail | 是 | String | 送货邮箱 | 100 | |
userAgent | 是 | String | 持卡人浏览器UserAgent | 128 | 收银台模式下可以为空 |
ipAddress | 是 | String | 持卡人IP地址 | 64 | |
productInfoList | 是 | List |
商品列表 | ||
version | 是 | String | 版本号 | 6 | 默认:V3.0.0 |
- 商品列表里的商品参数
参数名 | 必填 | 类型 | 说明 | 长度 | 备注 |
---|---|---|---|---|---|
sku | 是 | String | 商品编号 | 64 | |
productName | 是 | String | 商品名称 | 128 | |
price | 是 | String | 商品单价 | 16 | |
quantity | 是 | String | 商品数量 | 16 |
请求示例
public class Test{
public static void main(String[] args){
JSONObject jsonObject = new JSONObject();
jsonObject.put("merNo", "123455");
jsonObject.put("merOrderNo", "1641972507000");
jsonObject.put("currencyCode", "CNY");
//.....除签名(sign)以外的所有的body参数
//签名
String sign = MD5(merNo+merOrderNo+currencyCode+sourceAmount+商户密钥);
jsonObject.put("sign", sign.toUpperCase());
String url = "https://pay.tapxyz.com/payment";
HttpResponse httpResponse = HttpRequest.post(url)
.body(jsonObject.toJSONString(), "application/json")
.execute();
int status = httpResponse.getStatus();
if(status == HttpStatus.HTTP_OK){
String content = httpResponse.body();
}
//银联示例
HttpResponse httpResponse = HttpRequest.post(url)
.header("paymentType", "UNIONPAY_H5")
.body(jsonObject.toJSONString(), "application/json")
.execute();
int status = httpResponse.getStatus();
if(status == HttpStatus.HTTP_OK){
String content = httpResponse.body();
}
}
}
响应参数
- 响应体格式:Content-Type: text/html
响应示例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>响应标题</title>
</head>
<body>
...
</body>
</html>
异步通知
- 如果支付时没有传递notifyUrl参数,则通道方通知到Tapxyz后,Tapxyz不会通知到商户系统
请求参数
请求body参数
{
"tradeNo": "SN2201111806024151",
"merOrderNo": "1641972507000",
"code": "0",
"message": "成功"
}
- 请求地址:支付时传递的notifyUrl参数地址
- 请求方式:POST
- 请求头:Content-Type:application/x-www-form-urlencoded
- 请求参数:
- 异步回调只通知支付的状态及结果描述
参数名 | 必填 | 类型 | 说明 |
---|---|---|---|
tradeNo | 是 | String | 交易流水号 |
merOrderNo | 是 | String | 商户订单号 |
code | 是 | String | 支付结果(0:支付成功 1:支付失败) |
message | 是 | String | 支付结果描述 |
查询接口
请求参数
- 请求地址:
- 生产:https://pay.tapxyz.com/order/query
- 请求方式:POST
- 请求头:Content-Type:application/json
- 请求参数:
退款查询请求参数
{
"merNo":"104001001",
"merOrderNo":"asdfghjkl",
"version":"V3.0.0",
"sign":"9D6FDF4880B00B002B1F2AB61AE9A721",
"queryType":"refund",
"tradeNo": "SN13576867867",
"refundNo": "1232324324"
}
交易订单查询请求参数
{
"merNo":"104001001",
"merOrderNo":"asdfghjkl",
"version":"V3.0.0",
"sign":"9D6FDF4880B00B002B1F2AB61AE9A721",
"tradeNo": "SN13576867867",
"queryType":"sales"
}
参数名 | 必填 | 类型 | 说明 | 长度 | 备注 |
---|---|---|---|---|---|
merNo | 是 | Integer | 商户号 | 10 | 可在商户后台注册获取 |
merOrderNo | 是 | String | 商户订单号 | 32 | |
sign | 是 | String | 签名 | 32 | (merNo、merOrderNo、tradeNo、queryType、商户秘钥) 详细查看:签名 |
version | 是 | String | 版本号 | 6 | 默认:V3.0.0 |
tradeNo | 是 | String | 交易流水号 | 50 | |
queryType | 是 | String | 查询类型 | 16 | 退款查询:refund 交易订单查询:sales |
refundNo | 否 | String | Tapxyz系统生成的唯一退款号 | 50 | 退款查询必传 |
请求示例
public class Test{
public static void main(String[] args){
JSONObject jsonObject = new JSONObject();
jsonObject.put("merNo", "123455");
jsonObject.put("merOrderNo", "1641972507000");
//.....除签名(sign)以外的所有的body参数
//签名
String sign = MD5(merNo+merOrderNo+tradeNo+queryType+商户秘钥);
jsonObject.put("sign", sign.toUpperCase());
String url = "https://pay.tapxyz.com/order/query";
HttpResponse httpResponse = HttpRequest.post(url)
.body(jsonObject.toJSONString(), "application/json")
.execute();
int status = httpResponse.getStatus();
if(status == HttpStatus.HTTP_OK){
String content = httpResponse.body();
}
}
}
响应参数
交易查询响应成功示例
{
"code": "00000",
"message": "SUCCESS",
"data": {
"tradeNo": "SN2202101809494673",
"merOrderNo": "1644487789447",
"merNo": 104001002,
"state": "3"
}
}
退款查询响应成功示例
json { "code": "00000", "message": "SUCCESS", "data": { "tradeNo": "SN2202101809494673", "merOrderNo": "1644487789447", "refundNo": "202202101820320002", "merNo": 104001002, "refundCurrency": "CNY", "state": "6", "refundAmount": "5.00" } }
响应失败示例
{
"code": "10004",
"message": "商户号不存在"
}
参数名 | 必填 | 类型 | 说明 |
---|---|---|---|
code | 是 | String | 业务状态码(参考业务状态码) |
message | 是 | String | 业务请求状态描述 |
data | 否 | T | 请求响应数据 |
- 退款查询响应数据参数
参数名 | 必填 | 类型 | 说明 |
---|---|---|---|
state | 是 | Integer | 4 退款处理中 5 退款失败 6 退款成功 |
refundNo | 是 | String | |
refundAmount | 是 | String | |
refundCurrency | 是 | String | |
tradeNo | 是 | String | |
merNo | 是 | String | |
merOrderNo | 是 | String |
- 订单查询响应数据参数
参数名 | 必填 | 类型 | 说明 |
---|---|---|---|
state | 是 | Integer | 1 交易预处理 2 交易失败 3 交易成功 |
tradeNo | 是 | String | |
merNo | 是 | String | |
merOrderNo | 是 | String |
退款接口
请求参数
- 请求地址:
- 生产:https://pay.tapxyz.com/refund/apply
- 请求方式:POST
请求头:Content-Type:application/json
body参数:
{
"merNo":"104001001",
"merOrderNo":"asdfghjkl",
"amount":"10",
"version":"V3.0.0",
"tradeNo":"SN1234567890000",
"sign":"9D6FDF4880B00B002B1F2AB61AE9A721",
"notifyUrl":"https://www.test.com",
"remark":"12323425345"
}
参数名 | 必填 | 类型 | 说明 | 长度 | 备注 |
---|---|---|---|---|---|
merNo | 是 | Integer | 商户号 | 10 | 可在商户后台注册获取 |
merOrderNo | 是 | String | 商户订单号 | 32 | |
amount | 是 | String | 金额 | 12 | 保留两位小数 |
notifyUrl | 否 | String | 异步通知地址 | 512 | 用来接收Tapxyz向商户推送退款结果 |
sign | 是 | String | 签名 | 32 | (merNo、merOrderNo、amount、tradeNo、商户秘钥),详情请参阅:签名 |
version | 是 | String | 版本号 | 6 | 默认:V3.0.0 |
tradeNo | 是 | String | 交易流水号 | 50 | 商家支付时平台生成的订单号 |
remark | 否 | String | 备注 | 1000 |
public class Test{
public static void main(String[] args){
JSONObject jsonObject = new JSONObject();
jsonObject.put("merNo", "123455");
jsonObject.put("merOrderNo", "1641972507000");
//.....除签名(sign)以外的所有的body参数
//签名
String sign = MD5(merNo+merOrderNo+amount+tradeNo+商户密钥);
jsonObject.put("sign", sign.toUpperCase());
String url = "https://pay.tapxyz.com/refund/apply";
HttpResponse httpResponse = HttpRequest.post(url)
.body(jsonObject.toJSONString(), "application/json")
.execute();
int status = httpResponse.getStatus();
if(status == HttpStatus.HTTP_OK){
String content = httpResponse.body();
}
}
}
响应参数
响应成功示例
{
"code": "00000",
"message": "SUCCESS",
"data": {
"refundNo": "12312432423",
"tradeNo": "SN1234567890123",
"merNo": "104001001",
"merOrderNo": "abc12323424234",
"refundAmount": "10",
"refundCurrency": "CNY"
}
}
响应失败示例
{
"code": "10004",
"message": "商户号不存在"
}
参数名 | 必填 | 类型 | 说明 |
---|---|---|---|
code | 是 | String | 业务状态码(参考业务状态码) |
message | 是 | String | 业务请求状态描述 |
data | 否 | T | 请求响应数据 |
- 响应数据参数
参数名 | 必填 | 类型 | 说明 |
---|---|---|---|
refundNo | 是 | String | 退款申请成功生成的唯一ID |
tradeNo | 是 | String | 交易生成的唯一订单号 |
merNo | 是 | String | 退款申请商户号 |
merOrderNo | 是 | String | 退款商户订单号 |
refundAmount | 是 | String | 退款金额 |
refundCurrency | 是 | String | 退款币种 |
退款异步通知
- 如果退款时没有传递notifyUrl参数,则通道方通知到Tapxyz后,Tapxyz不会通知到商户系统
- 如果商户系统接收到Tapxyz通知后没有返回SUCCESS(区分大小写)字符串,Tapxyz会认为商户系统没有收到通知,Tapxyz会在第1,2,4,8,16,32,64,128分钟之后再次发起通知,Tapxyz总共会发起9次通知,如果商户系统在9次通知中都没有返回SUCCESS,则Tapxyz不会再发起通知。
请求参数
请求body参数
{
"tradeNo": "SN2201111806024151",
"merOrderNo": "1641972507000",
"refundNo": "1641972507000",
"state": "0",
"message": "SUCCESS",
"refundAmount": "10",
"refundCurrency": "CNY"
}
请求示例
public class Test{
public static void main(String[] args){
JSONObject jsonObject = new JSONObject();
jsonObject.put("tradeNo", "SN2201111806024151");
jsonObject.put("merOrderNo", "1641972507000");
jsonObject.put("refundNo", "2334543543534");
jsonObject.put("code", "0000");
jsonObject.put("message", "SUCCESS");
jsonObject.put("refundAmount", "10");
jsonObject.put("refundCurrency", "CNY");
String url = "退款时传递的notifyUrl参数地址";
HttpResponse httpResponse = HttpRequest.post(url)
.body(jsonObject.toJSONString(), "application/json")
.execute();
int status = httpResponse.getStatus();
if(status == HttpStatus.HTTP_OK){
String content = httpResponse.body();
if("SUCCESS".equals(content)){
//通知成功
} else{
//通知失败
}
} else{
//通知失败
}
}
}
- 请求地址:退款时传递的notifyUrl参数地址
- 请求方式:POST
- 请求头:Content-Type:application/json
- 请求参数:
参数名 | 必填 | 类型 | 说明 |
---|---|---|---|
tradeNo | 是 | String | 交易流水号 |
merOrderNo | 是 | String | 商户订单号 |
refundNo | 是 | String | 向Tapxyz发起退款生成的唯一退款号 |
state | 是 | Integer | 0 退款成功 1 退款失败 |
message | 是 | String | 退款结果描述 |
refundAmount | 是 | String | 退款金额 |
refundCurrency | 是 | String | 退款币种 |
国家编码
国家编码 | 名称 |
---|---|
AF | 阿富汗 |
AX | 奥兰群岛 |
AL | 阿尔巴尼亚 |
DZ | 阿尔及利亚 |
AS | 美属萨摩亚 |
AD | 安道尔 |
AO | 安哥拉 |
AI | 安圭拉 |
AQ | 南极洲 |
AG | 安提瓜和巴布达 |
AR | 阿根廷 |
AM | 亚美尼亚 |
AW | 阿鲁巴 |
AU | 澳大利亚 |
AT | 奥地利 |
AZ | 阿塞拜疆 |
BS | 巴哈马 |
BH | 巴林 |
BD | 孟加拉 |
BB | 巴巴多斯 |
BY | 白俄罗斯 |
BE | 比利时 |
BZ | 伯利兹 |
BJ | 贝宁 |
BM | 百慕大 |
BT | 不丹 |
BO | 玻利维亚 |
BA | 波黑 |
BW | 博茨瓦纳 |
BV | 布韦岛 |
BR | 巴西 |
IO | 英属印度洋领地 |
BN | 文莱 |
BG | 保加利亚 |
BF | 布基纳法索 |
BI | 布隆迪 |
KH | 柬埔寨 |
CM | 喀麦隆 |
CA | 加拿大 |
CV | 佛得角 |
KY | 开曼群岛 |
CF | 中非 |
TD | 乍得 |
CL | 智利 |
CN | 中国 |
CX | 圣诞岛 |
CC | 科科斯群岛 |
CO | 哥伦比亚 |
KM | 科摩罗 |
CG | 刚果(布) |
CD | 刚果(金) |
CK | 库克群岛 |
CR | 哥斯达黎加 |
CI | 科特迪瓦 |
HR | 克罗地亚 |
CU | 古巴 |
CY | 塞浦路斯 |
CZ | 捷克 |
DK | 丹麦 |
DJ | 吉布提 |
DM | 多米尼克 |
DO | 多米尼加 |
EC | 厄瓜多尔 |
EG | 埃及 |
SV | 萨尔瓦多 |
GQ | 赤道几内亚 |
ER | 厄立特里亚 |
EE | 爱沙尼亚 |
ET | 埃塞俄比亚 |
FK | 马尔维纳斯群岛(福克兰) |
FO | 法罗群岛 |
FJ | 斐济群岛 |
FI | 芬兰 |
FR | 法国 |
GF | 法属圭亚那 |
PF | 法属波利尼西亚 |
TF | 法属南部领地 |
GA | 加蓬 |
GM | 冈比亚 |
GE | 格鲁吉亚 |
DE | 德国 |
GH | 加纳 |
GI | 直布罗陀 |
GR | 希腊 |
GL | 格陵兰 |
GD | 格林纳达 |
GP | 瓜德罗普 |
GU | 关岛 |
GT | 危地马拉 |
GG | 根西岛 |
GN | 几内亚 |
GW | 几内亚比绍 |
GY | 圭亚那 |
HT | 海地 |
HM | 赫德岛和麦克唐纳群岛 |
VA | 梵蒂冈 |
HN | 洪都拉斯 |
HK | 中国香港 |
HU | 匈牙利 |
IS | 冰岛 |
IN | 印度 |
ID | 印尼 |
IR | 伊朗 |
IQ | 伊拉克 |
IE | 爱尔兰 |
IM | 马恩岛 |
IL | 以色列 |
IT | 意大利 |
JM | 牙买加 |
JP | 日本 |
JE | 泽西岛 |
JO | 约旦 |
KZ | 哈萨克斯坦 |
KE | 肯尼亚 |
KI | 基里巴斯 |
KP | 朝鲜 |
KR | 韩国 |
KW | 科威特 |
KG | 吉尔吉斯斯坦 |
LA | 老挝 |
LV | 拉脱维亚 |
LB | 黎巴嫩 |
LS | 莱索托 |
LR | 利比里亚 |
LY | 利比亚 |
LI | 列支敦士登 |
LT | 立陶宛 |
LU | 卢森堡 |
MO | 中国澳门 |
MK | 马其顿 |
MG | 马达加斯加 |
MW | 马拉维 |
MY | 马来西亚 |
MV | 马尔代夫 |
ML | 马里 |
MT | 马耳他 |
MH | 马绍尔群岛 |
MQ | 马提尼克 |
MR | 毛里塔尼亚 |
MU | 毛里求斯 |
YT | 马约特 |
MX | 墨西哥 |
FM | 密克罗尼西亚联邦 |
MD | 摩尔多瓦 |
MC | 摩纳哥 |
MN | 蒙古国 蒙古 |
MS | 蒙塞拉特岛 |
MA | 摩洛哥 |
MZ | 莫桑比克 |
MM | 缅甸 |
NA | 纳米比亚 |
NR | 瑙鲁 |
NP | 尼泊尔 |
NL | 荷兰 |
AN | 荷属安的列斯 |
NC | 新喀里多尼亚 |
NZ | 新西兰 |
NI | 尼加拉瓜 |
NE | 尼日尔 |
NG | 尼日利亚 |
NU | 纽埃 |
NF | 诺福克岛 |
MP | 北马里亚纳群岛 |
NO | 挪威 |
OM | 阿曼 |
PK | 巴基斯坦 |
PW | 帕劳 |
PS | 巴勒斯坦 |
PA | 巴拿马 |
PG | 巴布亚新几内亚 |
PY | 巴拉圭 |
PE | 秘鲁 |
PH | 菲律宾 |
PN | 皮特凯恩群岛 |
PL | 波兰 |
PT | 葡萄牙 |
PR | 波多黎各 |
QA | 卡塔尔 |
RE | 留尼汪 |
RO | 罗马尼亚 |
RU | 俄罗斯 |
RW | 卢旺达 |
SH | 圣海伦娜岛 |
KN | 圣基茨和尼维斯 |
LC | 圣卢西亚 |
PM | 圣皮埃尔和密克隆 |
VC | 圣文森特和格林纳丁斯 |
WS | 萨摩亚 |
SM | 圣马力诺 |
ST | 圣多美和普林西比 |
SA | 沙特阿拉伯 |
SN | 塞内加尔 |
ME | 黑山 |
SC | 塞舌尔 |
SL | 塞拉利昂 |
SG | 新加坡 |
SK | 斯洛伐克 |
SI | 斯洛文尼亚 |
SB | 所罗门群岛 |
SO | 索马里 |
ZA | 南非 |
GS | 南乔治亚岛和南桑威奇群岛 |
ES | 西班牙 |
LK | 斯里兰卡 |
SD | 苏丹 |
SR | 苏里南 |
SJ | 斯瓦尔巴群岛和扬马延岛 |
SZ | 斯威士兰 |
SE | 瑞典 |
CH | 瑞士 |
SY | 叙利亚 |
TW | 中国台湾 |
TJ | 塔吉克斯坦 |
TZ | 坦桑尼亚 |
TH | 泰国 |
TL | 东帝汶 |
TG | 多哥 |
TK | 托克劳 |
TO | 汤加 |
TT | 特立尼达和多巴哥 |
TN | 突尼斯 |
TR | 土耳其 |
TM | 土库曼斯坦 |
TC | 特克斯和凯科斯群岛 |
TV | 图瓦卢 |
UG | 乌干达 |
UA | 乌克兰 |
AE | 阿联酋 |
GB | 英国 |
US | 美国 |
UM | 美国本土外小岛屿 |
UY | 乌拉圭 |
UZ | 乌兹别克斯坦 |
VU | 瓦努阿图 |
VE | 委内瑞拉 |
VN | 越南 |
VG | 英属维尔京群岛 |
VI | 美属维尔京群岛 |
WF | 瓦利斯和富图纳 |
EH | 西撒哈拉 |
YE | 也门 |
ZM | 赞比亚 |
ZW | 津巴布韦 |
RS | 塞尔维亚 |
错误码
状态码 | 描述 |
---|---|
00000 | SUCCESS |
10000 | 支付方式不能为空 |
10001 | 支付方式不存在 |
10002 | 参数不能为空 |
10003 | 同一个商户号的同一个订单的相同时间内不能重复提交 |
10004 | 商户号不存在 |
10005 | 商户未激活 |
10006 | referer不能为空 |
10007 | 来源网址不符合相关规定 |
10008 | 商户网址限定 |
10009 | 商户订单号重复 |
10010 | 商户未设置交易币种 |
10011 | 通道未开通 |
10012 | 卡种未绑定 |
10013 | 银行不存在 |
10014 | 币种转换汇率不存在 |
10015 | 签名错误 |
10016 | 超出每日交易笔数限制 |
10017 | 超出每月交易笔数限制 |
10018 | 币种不能为空 |
10019 | 币种未开通或币种传入有误 |
10020 | 不存在单笔交易限额 |
10021 | 不存在每日交易限额 |
10022 | 不存在每月交易限额 |
10023 | 商户达到单笔交易上限 |
10024 | 商户达到每日交易上限 |
10025 | 商户达到每月交易上限 |
10026 | 交易不存在或无法匹配原始交易 |
10027 | 订单未确认 |
10028 | 订单已在退款处理中 |
10029 | 退款金额不足 |
10031 | 查询类型不存在 |
10032 | 无法识别的卡类型 |
10033 | 商户未设置卡种扣率 |
10034 | 商户未设置保证金扣率 |
10035 | 所有额度已用完 |
10036 | 通道被禁用 |
10037 | 暂不支持该卡交易 |
10038 | 成功次数限制 |
10039 | 失败次数超过设定最大允许失败次数(持卡人) |
10040 | 阻止规则阻止 |
10041 | 黑名单阻止 |
10042 | 元素限定 |
99994 | 请求方式不正确 |
99995 | 支付渠道连接超时 |
99996 | 数据类型转换异常 |
99997 | 参数缺失或不符合限制条件 |
99998 | 渠道支付失败 |
99999 | 系统异常 |
币种
编码 | 名称 |
---|---|
CNY | 人民币 |
USD | 美元 |
GBP | 英镑 |
HKD | 港币 |
CHF | 瑞士法郎 |
SGD | 新加坡元 |
SEK | 瑞典克朗 |
DKK | 丹麦克朗 |
NOK | 挪威克朗 |
JPY | 日元 |
CAD | 加拿大元 |
AUD | 澳元 |
EUR | 欧元 |
MOP | 澳门元 |
PHP | 菲律宾比索 |
THB | 泰铢 |
NZD | 新西兰元 |
KRW | 韩元 |
RUB | 俄罗斯卢布 |
MYR | 马来西亚林吉特 |
TWD | 新台币 |
INR | 印度卢比 |