thinkphp5.1使用支付寶接口(沙箱環境)


接口文件以及沙箱的測試賬號可以去支付寶開發中心獲取,下面給出一個簡單地例子

我新建了一個控制器Pay用來專門做支付

<?php
namespace app\index\controller;
use think\Db; require_once dirname(dirname(dirname(dirname(__FILE__)))).'/extend/alipay/pagepay/service/AlipayTradeService.php'; require_once dirname(dirname(dirname(dirname(__FILE__)))).'/extend/alipay/pagepay/buildermodel/AlipayTradePagePayContentBuilder.php'; class Pay extends Controller { public $config = array ( //應用ID,您的APPID。 'app_id' => "**********", //商戶私鑰 'merchant_private_key' => "¥¥¥¥¥¥¥¥¥", //異步通知地址 'notify_url' => "http://localhost/tp5/public/index.php/index/pay/notify_url", //同步跳轉 'return_url' => "http://localhost/tp5/public/index.php/index/pay/return_url", //編碼格式 'charset' => "UTF-8", //簽名方式 //支付寶網關 'gatewayUrl' => "https://openapi.alipaydev.com/gateway.do", //支付寶公鑰,查看地址:https://openhome.alipay.com/platform/keyManage.htm 對應APPID下的支付寶公鑰。 'alipay_public_key' => "¥¥¥¥¥¥¥¥¥¥¥", ); public function payPage(){ //獲取訂單生成后傳遞過來的訂單編號和金額 $data=input('param.'); //halt($data); //商戶訂單號,商戶網站訂單系統中唯一訂單號,必填 $out_trade_no = $data['sn']; //訂單名稱,必填 $subject = "服裝"; //付款金額,必填 $total_amount = $data['money']; //商品描述,可空 $body = ""; //構造參數 $payRequestBuilder = new \AlipayTradePagePayContentBuilder(); $payRequestBuilder->setBody($body); $payRequestBuilder->setSubject($subject); $payRequestBuilder->setTotalAmount($total_amount); $payRequestBuilder->setOutTradeNo($out_trade_no); $aop = new \AlipayTradeService($this->config); /** * pagePay 電腦網站支付請求 * @param $builder 業務參數,使用buildmodel中的對象生成。 * @param $return_url 同步跳轉地址,公網可以訪問 * @param $notify_url 異步通知地址,公網可以訪問 * @return $response 支付寶返回的信息 */ $response = $aop->pagePay($payRequestBuilder,$this->config['return_url'],$this->config['notify_url']); } public function notify_url(){ $arr=$_POST; $alipaySevice = new \AlipayTradeService($this->config); $alipaySevice->writeLog(var_export($_POST,true)); $result = $alipaySevice->check($arr); /* 實際驗證過程建議商戶添加以下校驗。 1、商戶需要驗證該通知數據中的out_trade_no是否為商戶系統中創建的訂單號, 2、判斷total_amount是否確實為該訂單的實際金額(即商戶訂單創建時的金額), 3、校驗通知中的seller_id(或者seller_email) 是否為out_trade_no這筆單據的對應的操作方(有的時候,一個商戶可能有多個seller_id/seller_email) 4、驗證app_id是否為該商戶本身。 */ if($result) {//驗證成功 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //請在這里加上商戶的業務邏輯程序代 //——請根據您的業務邏輯來編寫程序(以下代碼僅作參考)—— //獲取支付寶的通知返回參數,可參考技術文檔中服務器異步通知參數列表 //商戶訂單號 $out_trade_no = $_POST['out_trade_no']; //支付寶交易號 $trade_no = $_POST['trade_no']; //交易狀態 $trade_status = $_POST['trade_status']; if($_POST['trade_status'] == 'TRADE_FINISHED') { //判斷該筆訂單是否在商戶網站中已經做過處理 //如果沒有做過處理,根據訂單號(out_trade_no)在商戶網站的訂單系統中查到該筆訂單的詳細,並執行商戶的業務程序 //請務必判斷請求時的total_amount與通知時獲取的total_fee為一致的 //如果有做過處理,不執行商戶的業務程序 //注意: //退款日期超過可退款期限后(如三個月可退款),支付寶系統發送該交易狀態通知 } else if ($_POST['trade_status'] == 'TRADE_SUCCESS') { //判斷該筆訂單是否在商戶網站中已經做過處理 //如果沒有做過處理,根據訂單號(out_trade_no)在商戶網站的訂單系統中查到該筆訂單的詳細,並執行商戶的業務程序 //請務必判斷請求時的total_amount與通知時獲取的total_fee為一致的 //如果有做過處理,不執行商戶的業務程序 //注意: //付款完成后,支付寶系統發送該交易狀態通知 } //——請根據您的業務邏輯來編寫程序(以上代碼僅作參考)—— echo "success"; //請不要修改或刪除 }else { //驗證失敗 echo "fail"; } } public function return_url(){ $arr=$_GET; $alipaySevice = new \AlipayTradeService($this->config); $result = $alipaySevice->check($arr); /* 實際驗證過程建議商戶添加以下校驗。 1、商戶需要驗證該通知數據中的out_trade_no是否為商戶系統中創建的訂單號, 2、判斷total_amount是否確實為該訂單的實際金額(即商戶訂單創建時的金額), 3、校驗通知中的seller_id(或者seller_email) 是否為out_trade_no這筆單據的對應的操作方(有的時候,一個商戶可能有多個seller_id/seller_email) 4、驗證app_id是否為該商戶本身。 */ if($result) {//驗證成功 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //請在這里加上商戶的業務邏輯程序代碼 //——請根據您的業務邏輯來編寫程序(以下代碼僅作參考)—— //獲取支付寶的通知返回參數,可參考技術文檔中頁面跳轉同步通知參數列表 //商戶訂單號 $out_trade_no = htmlspecialchars($_GET['out_trade_no']); //支付寶交易號 $trade_no = htmlspecialchars($_GET['trade_no']); //將訂單表中的支付狀態更改為已支付,並將支付寶交易號寫入數據表中 Db::table('sp_order')->where('sn',$out_trade_no)->update(['pay_status'=>1,'alipay'=>$trade_no]); $this->success('支付成功,跳轉中...','index/index'); //——請根據您的業務邏輯來編寫程序(以上代碼僅作參考)—— ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// } else { //驗證失敗 echo "驗證失敗"; } } }

 


免責聲明!

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



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