由於項目需要,所以需要開發支付寶支付與微信支付,支付部分採用了
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 錯誤 、密鑰錯誤、收款方姓名不對、收款方和付款方相同 等
③找不到類