ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

支付宝退款接口对接流程PHP语言

2020-07-15 16:01:11  阅读:449  来源: 互联网

标签:alipay 支付宝 refund aop PHP 退款 sdk


先分享一下支付宝退款的程序源码(我这段代码是通过配置证书而不是字符串秘钥的方式)

sdk下载地址:https://opendocs.alipay.com/open/54/103419#%E8%8E%B7%E5%8F%96%20Alipay%20SDK

    public function refund($refund)
    {
        $appCertPath = THINK_PATH."Library/Vendor/alipay-sdk-PHP-4.9.1/aop/cert/appCertPublicKey_2016071801632148.crt";
        $alipayCertPath = THINK_PATH."Library/Vendor/alipay-sdk-PHP-4.9.1/aop/cert/alipayCertPublicKey_RSA2.crt";
        $rootCertPath = THINK_PATH."Library/Vendor/alipay-sdk-PHP-4.9.1/aop/cert/alipayRootCert.crt";

        require_once THINK_PATH.'Library/Vendor/alipay-sdk-PHP-4.9.1/aop/AopCertClient.php';
        require_once THINK_PATH.'Library/Vendor/alipay-sdk-PHP-4.9.1/aop/request/AlipayTradeRefundRequest.php';

        $aop = new \AopCertClient();
        //网关与证书配置
        $aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
        $aop->appId = '应用id';
        $aop->rsaPrivateKey = '用工具生成的RSA私钥,去头去尾去空格';
        $aop->alipayrsaPublicKey=$aop->getPublicKey($alipayCertPath);//'请填写支付宝公钥,一行字符串';
        $aop->isCheckAlipayPublicCert = true;
        $aop->appCertSN = $aop->getCertSN($appCertPath);
        $aop->alipayRootCertSN = $aop->getRootCertSN($rootCertPath);
        //算法编码与格式配置
        $aop->apiVersion = '1.0';
        $aop->signType = 'RSA2';
        $aop->postCharset='UTF-8';
        $aop->format='json';
        //参数内容配置
        $request = new \AlipayTradeRefundRequest ();
        $parameter = array(
            "out_trade_no"=>$this->payInfo['order_id'],//自己商城系统内的订单号,也是原来被付款的订单号
            "refund_amount"=>$this->payInfo['amount'],//退款金额
            "refund_reason"=>"正常退款"
        );
        $request->setBizContent(json_encode($parameter));

        $result = $aop->execute ( $request);

        $responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
        $resultCode = $result->$responseNode->code;
        
     //以下是退款成功后的回调商城对应的操作,与支付宝退款无关
$orderRefund = new OrderRefund(); if(!empty($resultCode)&&$resultCode == 10000){ $orderRefund->returnOkCallback($refund,"成功提交退款至支付宝账户"); } else { $orderRefund->returnErrorCallback($refund,"提交退款至支付宝账户失败"); } }

1.首先你在支付宝平台上要有自己的应用,https://open.alipay.com/platform/developerIndex.htm,没有则创建

$aop->appId 即我们创建的应用id

2.配置秘钥,下载官方工具生成,文档地址:https://opendocs.alipay.com/open/291/105971,生成证书也在该文档中
$aop->rsaPrivateKey

 

3.参数内容中我还有一个订单的详情内容没有配置,只是一个简单的退款,如果你想丰富你的退款商品或者订单信息,查看官方退款接口文档

https://opendocs.alipay.com/apis/api_1/alipay.trade.refund



遇到的坑汇总一下
1.明明信息都是对的,接口返回证书错误,更改了sdk中一处精度的问题,AopCertClient.php的135行
    /**
     * 0x转高精度数字
     * @param $hex
     * @return int|string
     */
    function hex2dec($hex)
    {
        $dec = 0;
        $len = strlen($hex);
        for ($i = 1; $i <= $len; $i++) {
            $dec = bcadd($dec, bcmul(strval(hexdec($hex[$i - 1])), bcpow('16', strval($len - $i))));
        }
        //return round($dec,0);
        return $dec;
    }

 

 

----------------------------------------------------------------

愿每个程序员都少走弯路,少踩坑,多分享帮助更多的人

标签:alipay,支付宝,refund,aop,PHP,退款,sdk
来源: https://www.cnblogs.com/bafeiyu/p/13306016.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有