1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- <?php
- /**
- * @note: 支付宝退款
- * @author: jdzor <895947580@qq.com>
- * @date: 2019/3/29
- */
- namespace payment\alipay;
- /**
- * 统一收单交易退款
- * 接口文档:https://docs.open.alipay.com/api_1/alipay.trade.refund/
- * 公共错误码:https://docs.open.alipay.com/common/105806
- *
- * 使用方法:
- * $alipay = new AlipayRefund($config);
- * $info = $alipay->doRefund($payData);
- * $info = $alipay->queryRefund($payData);
- * $info['code'] != 10000 && json_error((($info['sub_msg'] ?? '') . ' ' . $info['sub_code'] ?? ''), -2);
- *
- * Class AlipayRefund
- * @package app\common\extend\alipay
- */
- class AlipayRefund extends BaseAlipay
- {
- const REFUND_URL = 'alipay.trade.refund'; //申请退款
- const REFUND_QUERY_URL = 'alipay.trade.fastpay.refund.query'; //退款查询
- public function __construct($config)
- {
- parent::__construct($config);
- }
- //申请退款
- public function doRefund($param)
- {
- isset($param['out_trade_no']) || json_error('缺少参数:out_trade_no');
- isset($param['refund_amount']) || json_error('缺少参数:refund_amount');
- isset($param['refund_reason']) || json_error('缺少参数:refund_reason');
- isset($param['out_request_no']) || json_error('缺少参数:out_request_no');
- //请求参数
- $requestConfig = [
- 'out_trade_no' => $param['out_trade_no'], //商户订单号
- 'refund_amount' => $param['refund_amount'], //需要退款的金额,该金额不能大于订单金额,单位为元,支持两位小数
- 'refund_reason' => $param['refund_reason'], //退款的原因说明,256字以内
- 'out_request_no' => $param['out_request_no'], //标识一次退款请求,同一笔交易多次退款需要保证唯一,如需部分退款,则此参数必传
- ];
- $result = json_decode($this->commonRequest($requestConfig, self::REFUND_URL), true);
- return $result['alipay_trade_refund_response'];
- }
- //退款查询
- public function queryRefund($param)
- {
- isset($param['out_trade_no']) || json_error('缺少参数:out_trade_no');
- isset($param['out_request_no']) || json_error('缺少参数:out_request_no');
- //请求参数
- $requestConfig = [
- 'out_trade_no' => $param['out_trade_no'], //订单支付时传入的商户订单号,和支付宝交易号不能同时为空
- 'out_request_no' => $param['out_request_no'], //请求退款接口时,传入的退款请求号,如果在退款请求时未传入,则该值为创建交易时的外部交易号
- ];
- $result = json_decode($this->commonRequest($requestConfig, self::REFUND_QUERY_URL), true);
- return $result['alipay_trade_fastpay_refund_query_response'];
- }
- }
|