首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >php对接支付宝支付退款功能,亲测可行

php对接支付宝支付退款功能,亲测可行

作者头像
超级小可爱
发布2025-08-13 09:09:40
发布2025-08-13 09:09:40
14400
代码可运行
举报
文章被收录于专栏:小孟开发笔记小孟开发笔记
运行总次数:0
代码可运行

alipay.trade.refund(统一收单交易退款接口)

服务端sdk-php版本

封装的工具栏代码如下:

代码语言:javascript
代码运行次数:0
运行
复制
<?php
require_once '../extend/alipay/aop/AopClient.php';
require_once '../extend/alipay/aop/AopCertClient.php';
require_once '../extend/alipay/aop/AopCertification.php';
require_once '../extend/alipay/aop/AlipayConfig.php';
require_once '../extend/alipay/aop/request/AlipayTradeRefundRequest.php';

/**
 * 支付宝服务类
 * 封装支付宝相关功能,包含完整默认配置,适合单一支付宝账号的项目
 */
class Alipay
{

    private $aop;

    public function __construct() {
        $config = get_addon_config('epay');//这里我用的fasadmin的插件配置,可自己修改为普通数据存储配置
        $this->aop = new AopClient();
        $this->aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
        $this->aop->appId = $config['alipay']['app_id'];
        $this->aop->rsaPrivateKey = $config['alipay']['private_key'];
        $this->aop->alipayrsaPublicKey = $config['alipay']['ali_public_key'];
        $this->aop->signType = 'RSA2';
        $this->aop->postCharset = 'UTF-8';
        $this->aop->format = 'json';
    }

    /**
     * 支付宝退货处理
     * 退货前提是必须支付成功
     * @param type $orderId
     * @return bool
     */
    public function refund($params) {
        $request = new AlipayTradeRefundRequest ();
        $bizcontent = json_encode([
            //'out_trade_no'=>$params['out_trade_no'],
            'trade_no'=>$params['trade_no'],
            'refund_amount'=>$params['refund_amount'],
            'refund_reason'=>'正常退款'
        ]);
        $request->setBizContent($bizcontent);
        $result = $this->aop->execute($request);
        $responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
        $resultCode = $result->$responseNode->code;
        //var_dump($result->$responseNode);
        if(!empty($resultCode)&&$resultCode == 10000){//退款成功
             $result=[
                'trade_no'=>$result->$responseNode->trade_no,
                'out_trade_no' =>$result->$responseNode->out_trade_no,
             ];
             return $result;
        } else {//退款失败
            return false;
        }
    }
}
?>

调用示例:

代码语言:javascript
代码运行次数:0
运行
复制
//测试支付宝退款
    public function test_alipay_refund(){
        $order_id=$this->request->param('order_id');//订单id
        $option['id']=$order_id;
        $order=Db::name('hospital_order')->where($option)->find();
        if(!$order){
            $this->error('该订单不存在');
        }
        $alipay = new \Alipay();
        $out_refund_no='tk_'.create_order_sn();
        $params=[
          //'out_trade_no' => '商户订单号(与trade_no二选一)',
          'trade_no' => $order['trade_no'],
          'refund_amount' => $order['pay_amount'],
          'refund_reason' => '正常退款',
          'out_request_no' => $out_refund_no,
          //'refund_goods_detail' =>[],
          //'refund_royalty_parameters' => [],退分账明细信息
          //'query_options' => '查询选项',
          //'related_settle_confirm_no' => '针对账期交易'
        ];
        $result=$alipay->refund($params);
        var_dump($result);die;
    }

(adsbygoogle = window.adsbygoogle || []).push({});

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-8-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • alipay.trade.refund(统一收单交易退款接口)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档