支付宝退款
支付宝退款接口注意:
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'] : '退款失败');
}
//走到这里就退款成功了,可以处理退款成功的逻辑