调用此接口发起全额退款或部分退款请求。退款请求无法撤销。
#网关URL
注意:
如果使用POST方法,请在请求URL中传入_input_charset。例如:https://mapi.alipaydev.com/gateway.do?_input_charset=UTF-8
#请求参数
参数描述
基本参数
service
String 不可空接口名称
Example:alipay.acquire.overseas.spot.refund
partner
String(16) 不可空支付宝分配的用于标识支付宝帐户的合作伙伴ID。合作伙伴ID是2088开头的16位数字。
示例:2088*********662
_input_charset
String请求数据的编码集,支持UTF-8。
示例:UTF-8
sign_type
String 不可空签名类型。支持RSA,RSA2和MD5。请使用大写形式。
示例:RSA
sign
String 不可空签名值
示例:e5815a4556db338ed237f7d3fd222184
notify_url
URL(200)交易支付完成之后的接收通知的URL。
示例:https://www.test.com/alipay/notify_url.php
业务参数
partner_trans_id
String(64) 不可空原支付请求中合作伙伴的交易号
示例:2010121000000002
alipay_trans_id
String(64)支付宝交易号
示例:201311221703338463
partner_refund_id
String(64) 不可空合作伙伴系统中的退款订单号。此字段的值不能与partner_transaction_id字段的值相同。同一个合作伙伴ID下的一个partner_refund_id,系统将识别为一笔退款。
示例:301012133000002
refund_amount
Number(9,2) 不可空退款金额。退款金额不能大于原始交易金额和未退款金额。
示例:39.25
currency
String(10) 不可空退款币种,使用大写形式。关于币种的更多信息,具体请参见支持币种。
示例:USD
refund_reason
String(128)退款原因
示例:Refund the good
is_sync
String(1)用来表明退款请求是同步或异步处理,值为Y或N。默认值为N,表示异步处理,支付宝发送异步通知到商户在请求参数中传入的notify_url。如果值为Y,表示同步处理,支付宝仅返回同步通知。
示例:Y
注意:
金额的小数位数精度(如refund_amount的值)取决于货币值。如果currency的值为JPY或KRW,则金额必须为整数,如100 JPY。其他货币金额精确到小数点后两位,如100.00 USD。其他格式将导致报错,如100.999 USD。
#返回参数
#同步返回参数
#支付宝网关接受的参数
参数描述
is_success
String(1) 不可空用于展示请求是否成功,值为T表示成功,值为F表示失败。
注意:成功的请求并不意味着业务被接受并成功完成处理。
示例:T
sign_type
String 不可空签名类型,支持RSA,RSA 2和MD5,请使用大写形式。
示例:MD5
sign
String(32) 不可空签名值
示例:59c7275cf3c82f038b7c0076f9888926
result_code
String(32) 不可空请求处理结果
SUCCESS:处理成功
FAILED:处理失败
示例:SUCCESS
error
String(48)请求失败时返回的错误代码,用于描述请求失败的原因。具体请参见错误码。
示例:TRANS_NOT_FOUND
partner_trans_id
String(64) 不可空原支付请求中合作伙伴的交易号。返回值与请求传入值相同。
示例:201311221000000002
alipay_trans_id
String(64)支付宝为商户请求分配的交易号。该字段与partner和partner_trans_id形成映射关系。
Example:201311221703338463
partner_refund_id
String(64) 不可空合作伙伴系统中的退款订单号,同一个合作伙伴ID下的一个partner_refund_id,系统将识别为一笔退款。
Example:301012133000002
refund_amount
Number(9,2) 不可空退款金额。退款金额不能大于原始交易金额和未退款金额。
示例:39.25
currency
String(10) 不可空退款币种
示例:USD
exchange_rate
Number(8,6)支付请求中的外币与人民币之间的汇率。汇率换算在支付宝交易订单创建时发生。
示例:6.0939
refund_amount_cny
Number(9,2)人民币退款金额,即支付宝实际退款金额。
示例:239.19
#支付宝网关拒绝的参数
参数描述
is_success
String(1) 不可空用于展示支付宝网关是否接收请求
T:接受
F:拒绝
示例:F
sign_type
String 不可空签名类型,支持RSA,RSA 2和MD5,请使用大写形式。
示例:MD5
sign
String(32) 不可空签名值
示例:59c7275cf3c82f038b7c0076f9888926
error
String(48)请求失败时返回的错误代码,用于描述请求失败的原因。具体请参见错误码。
示例:TRANS_NOT_FOUND
#异步返回参数
在处理完商户的请求数据后,支付宝通过服务器主动通知商户网站数据处理的结果。下表为异步通知中的参数:
参数描述
基本参数
notify_time
Timestamp 不可空通知发送时间,格式为yyyy-MM-dd HH:mm:ss。
Example:2013-11-27 15:45:58
notify_type
String 不可空通知类型
Example:refund_status_sync
notify_id
String 不可空通知ID,合作伙伴可使用通知ID验证通知的合法性。
Example:ac05099524730693a8b 330c5ecf72da978
sign_type
String 不可空签名类型,支持RSA,RSA 2和MD5,请使用大写形式。
Example:MD5
sign
String 不可空签名值
Example:601510b7970e52cc63d b0f44997cf70e
业务参数
out_trade_no
String(64)商户网站订单系统中的订单号,非支付宝交易号,需确保在商户系统中订单号的唯一性。该字段的值与请求中传入的值保持一致。
Example:990xxxxxxx8989
out_return_no
String(64) 不可空合作伙伴系统中的退款订单号。如果商户在支付宝网站发起退款请求,该字段的值由支付宝自动生成。
Example:301012133000002
refund_status
String(64) 不可空退款状态
REFUND_SUCCESS:退款成功
REFUND_FAIL:退款失败
Example:REFUND_SUCCESS
currency
String(8)退款币种
Example:USD
return_amount
Number(9,2)退款金额
Example:1.00
trans_refund_fee
Number(9,2)以交易币种表示的预计退款金额,仅供参考。
Example:1.00
error_code
String退款失败时返回的错误代码,用于描述退款失败的原因。当退款成功时,该字段为空。
Example:ILLEGAL_SIGN
#错误码
错误码描述
SYSTEM_ERROR支付宝系统错误
解决方案:输入正确的参数,并且重新发送请求。具体请参见案例 2。
ILLEGAL_SIGN签名不正确
解决方案:使用正确的签名重试。
INVALID_PARAMETER参数不正确
解决方案根据接口说明检查每个请求参数的标准。
ILLEGAL_ARGUMENT参数不正确
解决方案根据接口说明检查每个请求参数的标准。如果此错误仍然存在,联系支付宝技术支持。
ILLEGAL_PARTNER商户ID不正确
解决方案:确保partner值与支付宝分配的值一致。如果此错误仍然存在,请联系支付宝技术支持。
ILLEGAL_EXTERFACE接口配置不正确
解决方案:确保service参数的值同接口说明中的值一致。如果此错误仍然存在,联系支付宝技术支持。
ILLEGAL_PARTNER_EXTERFACE商户无权使用该接口
解决方案:确保您与支付宝的协议已签订。如果需要,请联系支付宝技术支持。
ILLEGAL_SIGN_TYPE签名类型不正确
解决方案:确保sign_type值为 MD5、RSA 或 RSA2。如果此错误仍然存在,请联系支付宝技术支持。
HAS_NO_PRIVILEGE无权访问
解决方案:联系支付宝技术支持。
REASON_TRADE_BEEN_FREEZEN由于安全问题,交易被冻结。
解决方案:联系支付宝技术支持。
TRADE_NOT_EXIST根据partner_trans_id值无法找到对应交易
解决方案:确保partner_trans_id参数值正确。如果此错误仍然存在,请联系支付宝技术支持。
TRADE_STATUS_ERROR相应交易的状态不允许当前操作
解决方案:确保交易状态正确。如果此错误仍然存在,请联系支付宝技术支持。
REFUND_AMT_RESTRICTION退款金额超过原始交易金额,或者总退款金额超过原始交易金额,支付宝无法处理。
解决方案:商户检查退款金额是否正确。
REQUEST_AMOUNT_EXCEED与错误码REFUND_AMT_RESTRICTION的原因相同。
解决方案:商户检查退款金额是否正确。
TRADE_HAS_CLOSE交易关闭,无法操作退款
解决方案:检查交易状态和退款时间范围设置。
MERCHANT_BALANCE_NOT_ENOUGH商户余额不足以处理此笔退款。可能的原因是之前交易金额已结算至商家账户。
解决方案:新的交易发生并且商户余额充足时,重试退款。
INVALID_ROUNDED_AMOUNT退款金额违反人民币金额和外币金额必须同时全额或部分退款的规则。以金额为0.07 CNY(0.01 USD)的交易为例,退款金额为0.06 CNY时,无法受理,因为剩余未退款金额为0.01 CNY(0 USD)。
REASON_TRADE_REFUND_FEE_ERR退款金额无效
解决方案:检查请求中的退款金额。
REFUND_CHARGE_ERROR支付进行中,退款失败。
解决方案:请稍后重试。
BUYER_NOT_EXIST买家不存在
解决方案:联系支付宝技术支持。
#结果处理
案例 1:当接口调用因网络问题或请求超时而失败,并且支付宝无响应时,执行以下操作:
1. 检查您的网络是否连接支付宝网关。使用正确的参数重新发送请求,直到收到支付宝响应。重试规则为每三秒钟一次,最多五次。
2. 如果仍未收到支付宝响应,请联系支付宝国际技术支持。
案例 2:如果收到支付宝响应,且以下结果之一被返回:is_success=F,error=SYSTEM_ERROR
is_success=T,result_code=FAILED,detail_error_code=SYSTEM_ERROR
执行以下操作:
1. 使用正确的参数重新发送请求,直到收到支付宝响应。重试规则为每三秒钟一次,最多五次。
2. 如果仍未收到支付宝响应,请联系支付宝国际技术支持。
案例 3:如果您收到支付宝响应为is_success=T ,result_code=SUCCESS,则退款请求已成功受理,但不代表退款操作已成功处理。
案例4:如果收到以下任何一种响应,表明退款失败:is_success=F,error=!SYSTEM_ERROR
is_success=T,result_code=FAILED,detail_error_code!=SYSTEM_ERROR
参考具体错误码以了解更多信息。
#伪代码
copytry{
if(isCase3){ //CASE 3
doSuccessProcess();
}
else if(isCase4){ //CASE 4
doFailureProcess();
}
else{ //CASE 2
retrySuccess = retryWithSameParameters(); //Retry every 3 seconds, up to 5 times.
if(retrySuccess){
doSuccessProcess();
}
else{
//request Alipay tech support.
}
}
}catch (Exception ex){ //CASE 1
retrySuccess = retryWithSameParameters(); //Retry every 3 seconds, up to 5 times.
if(retrySuccess){
doSuccessProcess();
}
else{
//request Alipay tech support.
}
}
}
#示例
#请求示例
异步处理:
https://intlmapi.alipay.com/gateway.do?service=alipay.acquire.overseas.spot.refund&partner=208xxxxxxxxx8155&_input_charset=UTF-8&sign_type=MD5¬ify_url=https%3A%2F%2Fwww.mikascoffee.com%2Fnotify¤cy=USD&partner_trans_id=out_trade_no_20190904_160450&partner_refund_id=partner_refund_id_20190904_160211&refund_amount=0.01&refund_reason=%E4%B9%B0%E5%AE%B6%E4%B8%BB%E5%8A%A8%E8%A6%81%E6%B1%82%E9%80%80%E6%AC%BE&sign=b0d81ca4ecc6f14d149626233c727ef2
同步处理:
https://intlmapi.alipay.com/gateway.do?service=alipay.acquire.overseas.spot.refund&partner=208xxxxxxxxx8155&_input_charset=UTF-8&sign_type=MD5¬ify_url=https%3A%2F%2Fwww.mikascoffee.com%2Fnotify¤cy=USD&partner_trans_id=out_trade_no_20190904_160450&partner_refund_id=partner_refund_id_20190904_160211&refund_amount=0.01&refund_reason=%E4%B9%B0%E5%AE%B6%E4%B8%BB%E5%8A%A8%E8%A6%81%E6%B1%82%E9%80%80%E6%AC%BE&is_sync=Y&sign=45f7af56d72cae12f1c74868873c47b8
#返回示例
同步返回示例
业务接收并正常处理:
copy
T
out_trade_no_20190904_160450
208xxxxxxxxx8155
alipay.acquire.overseas.spot.refund
UTF-8
b0d81ca4ecc6f14d149626233c727ef2
0.01
USD
The buyer wants to initiate a refund.
https://www.mikascoffee.com/notify
MD5
partner_refund_id_20190904_160211
201xxxxxxxxxxxxxxxxxxxxx3346
USD
7.18041000
partner_refund_id_20190904_160211
out_trade_no_20190904_160450
0.01
0.07
SUCCESS
fde68b2f3b82a599fd33eb84e250a220
MD5
请求失败或者数据错误:
copy<?xml version="1.0" encoding="UTF-8"?>
F
ILLEGAL_SIGN
异步通知示例
copyhttps://www.mikascoffee.com/notify
trans_refund_fee=0.01
notify_type=refund_status_sync
return_amount=0.01
notify_time=2019-09-11 19:24:30
out_trade_no=out_trade_no_20190904_163949
refund_status=REFUND_SUCCESS
sign=$$
out_return_no=partner_refund_id_20190904_160211
currency=USD
sign_type=MD5
notify_id=201xxxxxxxxxxxxxxxxxxxxxxxxxxx3785
注意:
关于异步通知,同步通知和数字签名的更多信息,参见接口说明。