支付寶支付與提現轉賬問題小結

由於項目需要,所以需要開發支付寶支付與微信支付,支付部分採用了

yansongda/pay    https://packagist.org/packages/yansongda/pay  https://yansongda.gitbooks.io/pay/(文檔說明地址)

第三方擴展包 , 簡單配置一下就可以使用,沒有遇到什麼問題  

但是由於業務需要, 需要用到提現業務,也就是支付寶支付的

alipay.fund.trans.toaccount.transfer(單筆轉賬到支付寶賬戶接口)

找了很久也沒有找到很簡單的集成支付寶單筆轉賬接口的擴展包,所以沒辦法只能自己來用支付寶給的SDK進行開發

首先下載了支付寶服務端SDK PHP版   下載地址https://docs.open.alipay.com/54/103419/ 

然後解壓添加進項目目錄  app\Libs\Alipay   Libs爲自己建的目錄,用來裝第三方類庫  

之後打開composer.json文件  在autoload裏面的classmap裏面添加入新添加的SDK

由於項目需要,所以需要開發支付寶支付與微信支付,支付部分採用了

yansongda/pay    https://packagist.org/packages/yansongda/pay  https://yansongda.gitbooks.io/pay/(文檔說明地址)
第三方擴展包 , 簡單配置一下就可以使用,沒有遇到什麼問題  

但是由於業務需要, 需要用到提現業務,也就是支付寶支付的

alipay.fund.trans.toaccount.transfer(單筆轉賬到支付寶賬戶接口)
找了很久也沒有找到很簡單的集成支付寶單筆轉賬接口的擴展包,所以沒辦法只能自己來用支付寶給的SDK進行開發

首先下載了支付寶服務端SDK PHP版   下載地址https://docs.open.alipay.com/54/103419/ 

然後解壓添加進項目目錄  app\Libs\Alipay   Libs爲自己建的目錄,用來裝第三方類庫  

之後打開composer.json文件  在autoload裏面的classmap裏面添加入新添加的SDK
之後再執行composer dump-autoload 這樣第三方的SDK就引入成功了

然後在控制器或者自己定義的業務層中就可以直接use這個SDK了   在new  類的時候會在前面出現 \ 屬於正常

然後將給出的PHP示例粘貼進自己的業務代碼中  點擊查看官方請求示例https://docs.open.alipay.com/api_28/alipay.fund.trans.toaccount.transfer#s4

注意事項:

  1、粘貼到自己的業務邏輯中之後  所有new的類必須刪除自己手打引入    比如: AopClient() 、 AlipayFundTransToaccountTransferRequest() 否則會爆出class not found 等錯誤

  2、按照說明配置所有參數之後,請求會爆出 “ 文件編碼:[UTF-8] 與表單提交編碼:[GBK]兩者不一致!”錯誤,只要將複製的代碼中 $aop->postCharset 值的GBK修改成爲UTF-8即可

  3、支付寶SDK與Laravel都自定義了encrypt與decrypt函數,所以會產生衝突,只要將支付寶SDK中的 \aop\AopClient.php \aop\AopEncrypt.php  \lotusphp_runtime\Cookie\Cokkie.php 下的這兩個函數全部重新命名即可,注意所有的  包括引用函數   直接在編輯器中查找替換也可以。

然後根據自己的業務來進行修改就可以了

如果爆出 “$sign”錯誤,請檢查自己的公鑰、私鑰、AppID等是否正確,如果使用沙箱測試,請將網關修改爲 

$aop->gatewayUrl = 'https://openapi.alipaydev.com/gateway.do';
最後貼上自己的代碼,歡迎指教
/*
     *支付寶提現接口
     */
    public function toTransfer($orderNo, $account, $amount, $payName, $payeeRealName, $remark)
    {
        $aop = new \AopClient();
        $aop->gatewayUrl = 'https://openapi.alipaydev.com/gateway.do';
        $aop->appId = config('Alipay.AppId');
        $aop->rsaPrivateKey = config('Alipay.PriKey');
        $aop->alipayrsaPublicKey = config('Alipay.PubKey');
        $aop->apiVersion = '1.0';
        $aop->signType = 'RSA2';
        $aop->postCharset = 'UTF-8';
        $aop->format = 'json';
        $request = new \AlipayFundTransToaccountTransferRequest ();
        $request->setBizContent("{" .
            "\"out_biz_no\":\"$orderNo\"," .
            "\"payee_type\":\"ALIPAY_LOGONID\"," .
            "\"payee_account\":\"$account\"," .
            "\"amount\":\"$amount\"," .
            "\"payer_show_name\":\"$payName\"," .
            "\"payee_real_name\":\"$payeeRealName\"," .
            "\"remark\":\"$remark\"" .
            "}");
        $result = $aop->execute($request);

        $responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";

        $resultCode = $result->$responseNode->code;

        if (!empty($resultCode) && $resultCode == 10000) {
            echo "成功";
        } else {
            echo "失敗";
        }
    }

遇到問題:

①代碼中填寫的是RSA(SHA256)密鑰   應用公鑰是支付寶RSA簽名驗籤工具生成的 

代碼裏rsaPrivateKey = 私鑰(去掉開頭,去掉結尾 沒有空格)

代碼裏alipayrsaPublicKey = 支付寶公鑰

 

 

②check sign Fail! The reason : signData is Empty  報錯!  查找錯誤

 

 

 

var_dump具體錯誤  appid 錯誤  、密鑰錯誤、收款方姓名不對、收款方和付款方相同 等

 

③找不到類

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章