支付宝支付之退款

前言

当交易发生之后一段时间内,由于买家或者卖家的原因需要退款时,卖家可以通过退款接口将支付款退还给买家,支付宝将在收到退款请求并且验证成功之后,按照退款规则将支付款按原路退到买家帐号上。 交易超过约定时间(签约时设置的可退款时间)的订单无法进行退款 支付宝退款支持单笔交易分多次退款,多次退款需要提交原支付订单的商户订单号和设置不同的退款单号。一笔退款失败后重新提交,要采用原来的退款单号。总退款金额不能超过用户实际支付金额

官方文档

代码实现

/**
  * @do 支付宝退款
  */
 public function aliPayRefund()
 {
     //引入sdk
     require($_SERVER['DOCUMENT_ROOT'].'/../vendor/aop/AopClient.php');
     require($_SERVER['DOCUMENT_ROOT'].'/../vendor/aop/request/AlipayTradeRefundRequest.php');
     $aliPayConfig = Config::get('app.ALI_PAY_CONFIG');
     $aop = new \AopClient();
     $aop->gatewayUrl = "https://openapi.alipay.com/gateway.do";
     $aop->appId = $aliPayConfig['APPID'];
     $aop->rsaPrivateKey = $aliPayConfig['RSA_PRIVATE_KEY']; //私钥
     $aop->format = "json";
     $aop->charset = "UTF-8";
     $aop->signType = "RSA2";
     $aop->alipayrsaPublicKey = $aliPayConfig['RSA_PUBLIC_KEY']; //公钥
     $request = new \AlipayTradeRefundRequest();

     $data = array(
         'trade_no' => '2019111522001403451415092276',
//            'out_trade_no' => 's240057776956',
         'refund_amount' => "0.1"
     );

     $bizcontent = json_encode([
//            'out_trade_no'=> $data['out_trade_no'],//商户订单号
         'trade_no'=> $data['trade_no'],//支付宝交易号和商户订单号  二者不能同时不传
         'refund_amount'=> $data['refund_amount'],//退款金额
         'refund_reason'=> '正常退款'
     ]);

     $request->setBizContent($bizcontent);
     $result = $aop->execute($request);

     $responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
     //return json((array)$result->$responseNode);
     $resultCode = $result->$responseNode->code;
     if(!empty($resultCode)&&$resultCode == 10000){
         echo "成功";
     } else {
         echo "失败";
     }
 }
  • 数据示例
1.成功示例
{
    "code": "10000",
    "msg": "Success",
    "buyer_logon_id": "524***@qq.com",
    "buyer_user_id": "2088812338003453",
    "fund_change": "Y",//	本次退款是否发生了资金变化
    "gmt_refund_pay": "2019-11-15 10:36:58",
    "out_trade_no": "s243010308693",
    "refund_fee": "0.01",
    "send_back_fee": "0.00",
    "trade_no": "2019111522001403451415142978"//支付宝单号
}

2.失败示例
{
    "code": "40004",
    "msg": "Business Failed",
    "sub_code": "ACQ.REFUND_AMT_NOT_EQUAL_TOTAL",
    "sub_msg": "撤销或退款金额与订单金额不一致",
    "out_trade_no": "s243064954423",
    "refund_fee": "0.00",
    "send_back_fee": "0.00"
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值