php實現(xiàn)的支付寶網(wǎng)頁支付功能示例【基于TP5框架】
本文實例講述了php實現(xiàn)的支付寶網(wǎng)頁支付功能。分享給大家供大家參考,具體如下:
1.提交支付請求
require_once './payment/zfb/pagepay/service/AlipayTradeService.php'; require_once './payment/zfb/pagepay/buildermodel/AlipayTradePagePayContentBuilder.php'; $payInfo=Db::name('pay_type')->where(['pay_id'=>1])->find(); $zfb=json_decode($payInfo['pay_json'],true); $config=[ 'app_id'=>$zfb['app_id'], 'merchant_private_key'=>$zfb['merchant_private_key'], 'notify_url'=>config('z_notify_url'), 'return_url'=>config('z_return_url'), 'charset'=>config('charset'), 'sign_type'=>config('sign_type'), 'gatewayUrl'=>config('gatewayUrl'), 'alipay_public_key'=>$zfb['alipay_public_key'] ]; //商品訂單號 $out_trade_no=$orderData['order_number']; //訂單名稱,必填 $subject='充值訂單'; //付款金額 $total_amount=$money; //商品描述 $body = $out_trade_no . '-' . $this->agent_id.'-'.$money; $payRequestBuilder = new \AlipayTradePagePayContentBuilder(); $payRequestBuilder->setBody($body); $payRequestBuilder->setSubject($subject); $payRequestBuilder->setTotalAmount($total_amount); $payRequestBuilder->setOutTradeNo($out_trade_no); $aop = new \AlipayTradeService($config); $response = $aop->pagePay($payRequestBuilder,$config['return_url'],$config['notify_url']); echo $response;
2.異步回調(diào)支付寶參數(shù)認(rèn)證
$pay=Db::name('pay_type')->where(['pay_id'=>1])->find(); $zfb=json_decode($pay['pay_json'],true); $config = [ 'app_id' => $zfb['app_id'], 'merchant_private_key' => $zfb['merchant_private_key'], 'notify_url' => config('z_notify_url'), 'return_url' => config('z_return_url'), 'charset' => config('charset'), 'sign_type' => config('sign_type'), 'gatewayUrl' => config('gatewayUrl'), 'alipay_public_key' => $zfb['alipay_public_key'] ]; $arr=$_POST; $alipaySevice = new \AlipayTradeService($config); $alipaySevice->writeLog(var_export($_POST,true)); $result = $alipaySevice->check($arr); /* 實際驗證過程建議商戶添加以下校驗。 1、商戶需要驗證該通知數(shù)據(jù)中的out_trade_no是否為商戶系統(tǒng)中創(chuàng)建的訂單號, 2、判斷total_amount是否確實為該訂單的實際金額(即商戶訂單創(chuàng)建時的金額), 3、校驗通知中的seller_id(或者seller_email) 是否為out_trade_no這筆單據(jù)的對應(yīng)的操作方(有的時候,一個商戶可能有多個seller_id/seller_email) 4、驗證app_id是否為該商戶本身。 */ if($result) {//驗證成功 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //請在這里加上商戶的業(yè)務(wù)邏輯程序代 //——請根據(jù)您的業(yè)務(wù)邏輯來編寫程序(以下代碼僅作參考)—— //獲取支付寶的通知返回參數(shù),可參考技術(shù)文檔中服務(wù)器異步通知參數(shù)列表 //商戶訂單號 $out_trade_no = $_POST['out_trade_no']; //支付寶交易號 $trade_no = $_POST['trade_no']; //交易狀態(tài) $trade_status = $_POST['trade_status']; //交易金額 $total_amount = $_POST['total_amount']; if($_POST['trade_status'] == 'TRADE_FINISHED') { //判斷該筆訂單是否在商戶網(wǎng)站中已經(jīng)做過處理 //如果沒有做過處理,根據(jù)訂單號(out_trade_no)在商戶網(wǎng)站的訂單系統(tǒng)中查到該筆訂單的詳細(xì),并執(zhí)行商戶的業(yè)務(wù)程序 //請務(wù)必判斷請求時的total_amount與通知時獲取的total_fee為一致的 //如果有做過處理,不執(zhí)行商戶的業(yè)務(wù)程序 //注意: //退款日期超過可退款期限后(如三個月可退款),支付寶系統(tǒng)發(fā)送該交易狀態(tài)通知 } else if ($_POST['trade_status'] == 'TRADE_SUCCESS') { //判斷該筆訂單是否在商戶網(wǎng)站中已經(jīng)做過處理 //如果沒有做過處理,根據(jù)訂單號(out_trade_no)在商戶網(wǎng)站的訂單系統(tǒng)中查到該筆訂單的詳細(xì),并執(zhí)行商戶的業(yè)務(wù)程序 //請務(wù)必判斷請求時的total_amount與通知時獲取的total_fee為一致的 //如果有做過處理,不執(zhí)行商戶的業(yè)務(wù)程序 //注意: //付款完成后,支付寶系統(tǒng)發(fā)送該交易狀態(tài)通知 //此處應(yīng)該更新一下訂單狀態(tài),商戶自行增刪操作 這里寫你的邏輯程序 } //——請根據(jù)您的業(yè)務(wù)邏輯來編寫程序(以上代碼僅作參考)—— echo 'success'; }else { //驗證失敗 echo "fail"; } }
3.同步回調(diào)頁面跳轉(zhuǎn)處理 同步只是做一個跳轉(zhuǎn)處理 不要寫任何數(shù)據(jù)處理
$pay=Db::name('pay_type')->where(['pay_id'=>1])->find(); $zfb=json_decode($pay['pay_json'],true); $config = [ 'app_id' => $zfb['app_id'], 'merchant_private_key' => $zfb['merchant_private_key'], 'notify_url' => config('z_notify_url'), 'return_url' => config('z_return_url'), 'charset' => config('charset'), 'sign_type' => config('sign_type'), 'gatewayUrl' => config('gatewayUrl'), 'alipay_public_key' => $zfb['alipay_public_key'] ]; $arr=$_GET; $alipaySevice = new \AlipayTradeService($config); $result = $alipaySevice->check($arr); /* 實際驗證過程建議商戶添加以下校驗。 1、商戶需要驗證該通知數(shù)據(jù)中的out_trade_no是否為商戶系統(tǒng)中創(chuàng)建的訂單號, 2、判斷total_amount是否確實為該訂單的實際金額(即商戶訂單創(chuàng)建時的金額), 3、校驗通知中的seller_id(或者seller_email) 是否為out_trade_no這筆單據(jù)的對應(yīng)的操作方(有的時候,一個商戶可能有多個seller_id/seller_email) 4、驗證app_id是否為該商戶本身。 */ if($result) {//驗證成功 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //請在這里加上商戶的業(yè)務(wù)邏輯程序代碼 //——請根據(jù)您的業(yè)務(wù)邏輯來編寫程序(以下代碼僅作參考)—— //獲取支付寶的通知返回參數(shù),可參考技術(shù)文檔中頁面跳轉(zhuǎn)同步通知參數(shù)列表 //商戶訂單號 $out_trade_no = htmlspecialchars($_GET['out_trade_no']); //支付寶交易號 $trade_no = htmlspecialchars($_GET['trade_no']); $this->success("支付成功",url('Index/index')); //——請根據(jù)您的業(yè)務(wù)邏輯來編寫程序(以上代碼僅作參考)—— ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// } else { //驗證失敗 echo "驗證失敗"; }
更多關(guān)于thinkPHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《ThinkPHP入門教程》、《thinkPHP模板操作技巧總結(jié)》、《ThinkPHP常用方法總結(jié)》、《codeigniter入門教程》、《CI(CodeIgniter)框架進(jìn)階教程》、《Zend FrameWork框架入門教程》及《PHP模板技術(shù)總結(jié)》。
希望本文所述對大家基于ThinkPHP框架的PHP程序設(shè)計有所幫助。
相關(guān)文章
PHP CURL采集百度搜尋結(jié)果圖片不顯示問題的解決方法
這篇文章主要介紹了PHP CURL采集百度搜尋結(jié)果圖片不顯示問題的解決方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-02-02Laravel解決nesting level錯誤和隱藏index.php的問題
今天小編就為大家分享一篇Laravel解決nesting level錯誤和隱藏index.php的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-10-10PHP獲取遠(yuǎn)程http或ftp文件的md5值的方法
這篇文章主要介紹了PHP獲取遠(yuǎn)程http或ftp文件的md5值 ,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2019-04-04php 實現(xiàn)301重定向跳轉(zhuǎn)實例代碼
本文主要介紹php 實現(xiàn)301重定向跳轉(zhuǎn),通過實例代碼讓大家更好的理解重定向的方法,有需要的小伙伴可以參考下2016-07-07Yii2框架制作RESTful風(fēng)格的API快速入門教程
Yii提供了一整套用來簡化實現(xiàn)RESTful風(fēng)格的WebService服務(wù)的API。這篇文章主要介紹了Yii2框架制作RESTful風(fēng)格的API快速入門教程的相關(guān)資料,需要的朋友可以參考下2016-11-11php過濾html中的其他網(wǎng)站鏈接的方法(域名白名單功能)
這篇文章主要介紹了php過濾html中的其他網(wǎng)站鏈接的方法(域名白名單功能),需要的朋友可以參考下2014-04-04