php 支付宝退款,退款接口(条码支付)

调用此接口发起全额退款或部分退款请求。退款请求无法撤销。

#网关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&notify_url=https%3A%2F%2Fwww.mikascoffee.com%2Fnotify&currency=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&notify_url=https%3A%2F%2Fwww.mikascoffee.com%2Fnotify&currency=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

注意:

关于异步通知,同步通知和数字签名的更多信息,参见接口说明。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值