支付寶 單筆轉賬到支付寶賬戶介面
阿新 • • 發佈:2018-12-21
實現使用者提現 資金自動到賬
前期的支付寶配置 可以參考文章 支付寶配置 (新版)
當前開發環境:
Windows
phpstudy
ThinkPHP5
支付寶介面新版 1.0
實現提現的步驟
1 開發者平臺進行簽約
2 找到開發文件
3 實際開發測試
1 簽約
登入支付寶開放平臺,進入開發者中心->選擇需要對接的APP應用->找到下圖介面,進行新增 單筆轉賬到支付寶賬號 功能,然後簽約,
2 找到開發文件,
一般我們使用的都是支付 退款功能,這些api 都是在支付api裡列表中的,
而單筆轉賬是在資金api中的,我找了好一會才找到
3 實際開發
把demo放入到 extend 目錄下
3.1 引入核心檔案
Loader::import('alipay.aop.AopClient',EXTEND_PATH,'.php');
Loader::import('alipay.aop.request.AlipayFundTransToaccountTransferRequest',EXTEND_PATH,'.php');
Loader::import('alipay.aop.SignData',EXTEND_PATH,'.php');
3.2 提現函式
根據文件的說明,提現也是需要一個唯一的編號 來標識當前這筆轉賬交易記錄的,需要一個表進行記錄
/** * @User 一秋 * @param $userid 使用者id * @param $out_biz_no 編號 * @param $payee_account 提現的支付寶賬號 * @param $amount 轉賬金額 * @param $payee_real_name 賬號的真實姓名 * @return bool|Exception */ public static function userWithDraw( $userid,$out_biz_no,$payee_account,$amount,$payee_real_name) { $payer_show_name = '使用者紅包提現'; $remark = '紅包提現到支付寶'; $aop = new \AopClient(); $aop->gatewayUrl = config('alipay.gatewayUrl');//支付寶閘道器 https://openapi.alipay.com/gateway.do這個是不變的 $aop->appId = config('alipay.appId');//商戶appid 在支付寶控制檯找 $aop->rsaPrivateKey = config('alipay.rsaPrivateKey');//私鑰 工具生成的 $aop->alipayrsaPublicKey=config('alipay.alipayrsaPublicKey');//支付寶公鑰 上傳應用公鑰後 支付寶生成的支付寶公鑰 $aop->apiVersion = '1.0'; $aop->signType = 'RSA2'; $aop->postCharset='utf-8'; $aop->format='json'; $request = new \AlipayFundTransToaccountTransferRequest(); $request->setBizContent("{" . "\"out_biz_no\":\"$out_biz_no\"," . "\"payee_type\":\"ALIPAY_LOGONID\"," . "\"payee_account\":\"$payee_account\"," . "\"amount\":\"$amount\"," . "\"payer_show_name\":\"$payer_show_name\"," . "\"payee_real_name\":\"$payee_real_name\"," . "\"remark\":\"$remark\"" . "}"); $result = $aop->execute ($request); $responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response"; $resultCode = $result->$responseNode->code; if(!empty($resultCode)&&$resultCode == 10000){ //提現成功以後 更新表狀態 //並且記錄 流水等等 return true; } else { //$result->$responseNode->sub_msg 這個引數 是返回的錯誤資訊 throw new Exception($result->$responseNode->sub_msg); } }