支付宝退款接口注意:

1.out_trade_no商户发起支付宝支付时自己生成的订单号

2.out_request_no退款单号,商户自己生成的唯一退款单,可随意生成

3.refund_amount退款金额,必须小于等于该笔订单的实付金额,单位为元,且是字符串类型。number_format($orderData[‘ refund_amount ‘],2,”.”,””)

?php
/**
 * Created by PhpStorm.
 * User: chenl
 * Date: 2020/6/17
 * Time: 0:01
 */
namespace app\common\service;
use app\common\model\LogModel;
use think\Request;

class AliRefund {
    private $config;
    public function __construct( $config = [] )
    {
        if( !empty($config) ){
            $this->config = $config;
        }else{
            $this->config = config('alipay');
        }

    }
    //发起支付宝退款接口 
    public function refund($param){
        import('alipay.AopClient',EXTEND_PATH);
        import('alipay.request.AlipayTradeRefundRequest',EXTEND_PATH);

        $aliset = $this->config;
        $log=[];
        $log['title']='支付宝APP退款';
        $log['content']['config']= $aliset;
        $log['content']['param']= $param;

        $aop = new \AopClient ();
        $aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
        $aop->appId = $aliset['app_id'];
        $aop->rsaPrivateKey = $aliset['private_key'];
        $aop->alipayrsaPublicKey = $aliset['ali_public_key'];
        $aop->apiVersion = '1.0';
        $aop->signType = 'RSA2';
        $aop->postCharset='UTF-8';
        $aop->format='json';

        $arr = [];
        $arr['out_trade_no'] = $param['out_trade_no'];
        $arr['out_request_no'] = $param['out_request_no'];
        $arr['refund_amount'] = $param['refund_amount'];
        $arr['refund_reason'] = $param['refund_reason'];
        $json = json_encode($arr);
        $request = new \AlipayTradeRefundRequest();
        $request->setBizContent($json);
        $result = $aop->refund_execute ( $request);

        $log['content']['response']= $result;
        LogModel::add($log);
        return $result;
    }
}

调用支付宝退款接口

$alipay = new AliRefund( $config );
$res =  alipay->refund($order);
$log['content']['refund_res'] = $res;
if( empty( $res['alipay_trade_refund_response']['code'] ) || $res['alipay_trade_refund_response']['code'] != 10000){
    throw new Exception(!empty($res['alipay_trade_refund_response']['msg']) ? $res['alipay_trade_refund_response']['msg'] : '退款失败');
}
//走到这里就退款成功了,可以处理退款成功的逻辑

发表评论

电子邮件地址不会被公开。 必填项已用*标注