AlipayRefund.php 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <?php
  2. /**
  3. * @note: 支付宝退款
  4. * @author: jdzor <895947580@qq.com>
  5. * @date: 2019/3/29
  6. */
  7. namespace payment\alipay;
  8. /**
  9. * 统一收单交易退款
  10. * 接口文档:https://docs.open.alipay.com/api_1/alipay.trade.refund/
  11. * 公共错误码:https://docs.open.alipay.com/common/105806
  12. *
  13. * 使用方法:
  14. * $alipay = new AlipayRefund($config);
  15. * $info = $alipay->doRefund($payData);
  16. * $info = $alipay->queryRefund($payData);
  17. * $info['code'] != 10000 && json_error((($info['sub_msg'] ?? '') . ' ' . $info['sub_code'] ?? ''), -2);
  18. *
  19. * Class AlipayRefund
  20. * @package app\common\extend\alipay
  21. */
  22. class AlipayRefund extends BaseAlipay
  23. {
  24. const REFUND_URL = 'alipay.trade.refund'; //申请退款
  25. const REFUND_QUERY_URL = 'alipay.trade.fastpay.refund.query'; //退款查询
  26. public function __construct($config)
  27. {
  28. parent::__construct($config);
  29. }
  30. //申请退款
  31. public function doRefund($param)
  32. {
  33. isset($param['out_trade_no']) || json_error('缺少参数:out_trade_no');
  34. isset($param['refund_amount']) || json_error('缺少参数:refund_amount');
  35. isset($param['refund_reason']) || json_error('缺少参数:refund_reason');
  36. isset($param['out_request_no']) || json_error('缺少参数:out_request_no');
  37. //请求参数
  38. $requestConfig = [
  39. 'out_trade_no' => $param['out_trade_no'], //商户订单号
  40. 'refund_amount' => $param['refund_amount'], //需要退款的金额,该金额不能大于订单金额,单位为元,支持两位小数
  41. 'refund_reason' => $param['refund_reason'], //退款的原因说明,256字以内
  42. 'out_request_no' => $param['out_request_no'], //标识一次退款请求,同一笔交易多次退款需要保证唯一,如需部分退款,则此参数必传
  43. ];
  44. $result = json_decode($this->commonRequest($requestConfig, self::REFUND_URL), true);
  45. return $result['alipay_trade_refund_response'];
  46. }
  47. //退款查询
  48. public function queryRefund($param)
  49. {
  50. isset($param['out_trade_no']) || json_error('缺少参数:out_trade_no');
  51. isset($param['out_request_no']) || json_error('缺少参数:out_request_no');
  52. //请求参数
  53. $requestConfig = [
  54. 'out_trade_no' => $param['out_trade_no'], //订单支付时传入的商户订单号,和支付宝交易号不能同时为空
  55. 'out_request_no' => $param['out_request_no'], //请求退款接口时,传入的退款请求号,如果在退款请求时未传入,则该值为创建交易时的外部交易号
  56. ];
  57. $result = json_decode($this->commonRequest($requestConfig, self::REFUND_QUERY_URL), true);
  58. return $result['alipay_trade_fastpay_refund_query_response'];
  59. }
  60. }