入参列表
请求参数 | 描述 | 类型 | 是否必须传入 |
customerId | 支付平台分配给开发者的业务id | string | 是 |
txId | 支付平台订单id | string | 是 |
orderId | 业务订单id | string | 否 |
customerRefundId | 标识一次退款请求,同一笔交易多次退款需要保证唯一,不传表示全量退款,传表示批次退款。退款失败需要使用相同批次号进行退款 | string | 否 |
totalAmount | 支付金额,单位分 | Int | 是 |
refundAmount | 本次退款金额 | Int | 是 |
refundDesc | 退款原因描述 | string | 是 |
extData | 请求附加json串 | string | 否 |
notifyUrl | 退款异步通知接口,详细生成规则如下(1.4.1) | string | 是 |
timestamp | 请求时间戳 毫秒级 | Int | 是 |
traceId | 请求标识id | string | 是 |
version | 接口版本,目前1.0 | string | 是 |
signType | 签名校验类型,默认MD5 | string | 是 |
sign | 校验签名 | string | 是 |
返回列表
【errno及msg映射】
errno | Msg |
0 | Success |
8004010001 | 签名不正确 |
8004010002 | customerId参数为空 |
8004010003 | 参数错误 |
8004010004 | 内部错误 |
8004010005 | timestamp参数为空 |
8004010201 | 找不到订单 |
8004010202 | 找不到订单(customerId不匹配) |
800401206 | 全量退款进行中 |
8004010209 | 不支持退款 |
8004010211 | 退款渠道找不到 |
8004010212 | 当前批次退款已存在,并且不是退款失败状态 |
8004010213 | 渠道查询到的是未知退款状态 |
8004010215 | 退款总金额大于支付金额 |
8004010216 | 全量退款金额必须等于支付金额 |
8004010217 | 此渠道退款失败 |
8004010218 | 批次退款进行中,不可发起全量退款 |
800401221 | 全量退款已经成功 |
800401223 | totalAmount值不正确 |
800401312 | paypal只能退款一次 |
【data返回体】
子字段 | 描述 |
customerId | 支付平台分配给开发者的业务id |
txId | 支付平台订单 id |
orderId | 业务方订单id |
customerRefundId | 客户退款批次id |
refundId | 支付平台本次退款 id |
refundStatus | REFUND_CREATE或者REFUND_SUCCESS表示发起退款成功 |
返回示例
{
"errno": 0,
"msg": "SUCCESS",
"showMsg": "",
"data": {
"txId": 30271051**,
"orderId": "919188",
"customerRefundId": "",
"refundId": "2018090718**",
"refundStatus": "REFUND_CREATE",
"refundStatusDesc": "退款中",
"remainAmount": 0,
"refundTimes": 1,
"extData": null
}
}
1.4.1 接入方调用支付中心退款接口入参notifyUrl生成规则
- 需接入方提供
- 说明:退款请求回调接口
- 请求方式: http get
例:业务 notifyUrl 传入 http://xxx.com/abc , 回调请求地址为 http://xxx.com/abc?msgId=123&msgContent=通知Json字符消息体
notifyUrl 可以自己补充参数, 如 http://xxx.com/abc?axv=1 ,回调会自适应请求地址 http://xxx.com/abc?axv=1&msgId=123&msgContent=支付中心返回的JSON串
退款notifyUrl入参列表
传入参数 | 描述 | 类型 | 是否必须 |
msgId | 业务方id | string | 是 |
msgContent | 退款参数json串,详见退款接口返回的data字段json数据 | json | 是 |
【退款notifyUrl入参msgContent参数列表】
参数 |
子参数 |
描述 |
customerId |
无 |
业务方id |
orderId |
无 |
业务订单 id |
txId |
无 |
支付平台订单id |
refundCount |
无 |
退款次数 |
payChannel |
无 |
付款渠道 |
payChannelId |
无 |
付款渠道 id |
batchRefundList(列表,未传 refundId 或 customerRefundId 将返回全部批次) |
refundId |
支付平台退款 id |
customerRefundId |
客户退款 id |
refundStatus |
退款状态 REFUND_CREATE(退款中)、REFUND_FAIL(退款失败,可重新发起,需采用相同退款参数)、REFUND_SUCCESS(退款成功)、REFUND_NOT_SUPPORT(渠道不支持退款)、REFUND_CHANGE(退款异常,需要人工干预) |
refundStatusDesc |
退款状态描述 |
refundAmount |
退款金额 |
failReason |
支付失败原因 |
extData |
退款请求透传数据 |
leftAmount |
无 |
剩余可退款金额 |
【退款notifyUrl入参msgContent示例】
{
"customerId": 1,
"orderId": "30000***",
"txId": 30271343***,
"refundCount": 1,
"payChannel": 2,
"payChannelId": 2,
"leftAmount": 0,
"sign": "50afbb597dc080098b967d061b42f7a9",
"batchRefundList": [
{
"refundNo": "20180907570***",
"customerRefundId": "",
"refundStatus": "REFUND_SUCCESS",
"refundStatusDesc": "退款成功",
"refundAmount": 3,
"extData": "",
"refundEndTime": "2018-09-07 17:16:03"
}
]
}
退款notifyUrl接口需返回业务处理结果,给支付中心返回一个字符串,值如下
- SUCCESS 表示成功
- FAIL 表示失败 支付平台会立即重试
- REPUBLISH 支付平台稍后重试
支付中心明确收到指定返回后,才认为通知成功,否则会重试,业务方需保证该回调接口的幂等性,注意返回值是大写字符串。
注意事项:
- 此接口由 delaymq 进行通知, delaymq 的通知方式为 GET
- 支付中心调用接入方接口会回传两个参数msgId 和 msgContent
- msgContent 存储的Json 字段,未来有可能会新增新的一级字段,且参与签名,验签或解析时应当考虑兼容新增字段。
- 接入方需要校验 sign 以确保回调信息是来自支付中心的合法回调。签名校验方式如发起支付时的签名方式。
- 重试策略为 1, 10, 20, 60, 60, 180, 360, 600, 600, 3600, 7200, 7200, 代表回调未得到业务方成功响应后延迟重试时间(秒)
- JAVA解析示例
JSONObject jsonObject = JSONObject.parseObject(msgContent);
Map<string,string> map = new HashMap<>();
for(string key : jsonObject.keySet()){
map.put(key, jsonObject.get(key).toString());
}
- 为了保证安全,msgContent 内容需要进行验参,参见验参方式。注:将 batchRefundList转化为 json 字符串参与验参。
- 所有回调结构解析,注意最好不要用固定结构体接受验参,避免日后业务需求新增字段后,结构体接收丢失信息,签名校验失败。