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