支付寶退款接口對接流程PHP語言


先分享一下支付寶退款的程序源碼(我這段代碼是通過配置證書而不是字符串秘鑰的方式)

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_2016********2148.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

4.在線調試地址:https://openhome.alipay.com/platform/demoManage.htm#/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;
    }

 

 

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

願每個程序員都少走彎路,少踩坑,多分享幫助更多的人


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM