Alipay, China's leading third-party online payment solutionAlipay, China's leading third-party online payment solutionDOCS

      退款接口(条码支付)

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


      #网关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

      参考具体错误码以了解更多信息。


      #伪代码

      copy
      try{
        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
      <alipay>
          <is_success>T</is_success>
          <request>
              <param name="partner_trans_id">out_trade_no_20190904_160450</param>
              <param name="partner">208xxxxxxxxx8155</param>
              <param name="service">alipay.acquire.overseas.spot.refund</param>
              <param name="_input_charset">UTF-8</param>
              <param name="sign">b0d81ca4ecc6f14d149626233c727ef2</param>
              <param name="refund_amount">0.01</param>
              <param name="currency">USD</param>
              <param name="refund_reason">The buyer wants to initiate a refund.</param>
              <param name="notify_url">https://www.mikascoffee.com/notify</param>
              <param name="sign_type">MD5</param>
              <param name="partner_refund_id">partner_refund_id_20190904_160211</param>
          </request>
          <response>
          <alipay>
              <alipay_trans_id>201xxxxxxxxxxxxxxxxxxxxx3346</alipay_trans_id>
              <currency>USD</currency>
              <exchange_rate>7.18041000</exchange_rate>
              <partner_refund_id>partner_refund_id_20190904_160211</partner_refund_id>
              <partner_trans_id>out_trade_no_20190904_160450</partner_trans_id>
              <refund_amount>0.01</refund_amount>
              <refund_amount_cny>0.07</refund_amount_cny>
              <result_code>SUCCESS</result_code>
          </alipay>
          </response>
          <sign>fde68b2f3b82a599fd33eb84e250a220</sign>
          <sign_type>MD5</sign_type>
      </alipay>


      请求失败或者数据错误:

      copy
      <?xml version="1.0" encoding="UTF-8"?> 
       <alipay> 
         <is_success>F</is_success> 
         <error>ILLEGAL_SIGN</error> 
       </alipay>


      异步通知示例

      copy
      https://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


      注意:

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