php接入支付寶介面以及嵌入thinkphp框架
阿新 • • 發佈:2019-01-04
最近在寫個需要簡單支付的小專案,用到了支付寶介面,現已完成。把php接入支付寶的流程寫在這裡供像我一樣的小白參考。1.首先要有一個建立一個應用(選好自己想要的功能,關於支付的功能,貌似都需要簽約)
我選擇的是MD5簽名方式,下面紅框內就是做好的php Demo
lib檔案很重要,是整個介面的核心類檔案;alipay.config.php是相關引數的配置檔案alipayapi.php 是支付寶介面入口檔案notify_url.php 是伺服器非同步通知頁面檔案;return_url.php 是頁面跳轉同步通知檔案;3.開啟alipay.config.php
4.配置完成後這個小例子就能直接訪問了
通過這個例子,我們就能靈活運用了**********************************************嵌入thinkphp3.2.3我保留了
重新命名為
分別給這五個檔案加上名稱空間這四個檔案的名稱空間改為
Alipay.class.php 有改動
然後新建控制器TextController.class.php
這樣就成功完成簡單的支付功能了小白,共勉!
我選擇的是MD5簽名方式,下面紅框內就是做好的php Demo
lib檔案很重要,是整個介面的核心類檔案;alipay.config.php是相關引數的配置檔案alipayapi.php 是支付寶介面入口檔案notify_url.php 是伺服器非同步通知頁面檔案;return_url.php 是頁面跳轉同步通知檔案;3.開啟alipay.config.php
4.配置完成後這個小例子就能直接訪問了
通過這個例子,我們就能靈活運用了**********************************************嵌入thinkphp3.2.3我保留了
重新命名為
分別給這五個檔案加上名稱空間這四個檔案的名稱空間改為
Alipay.class.php 有改動
在config.php配置檔案裡配置引數<?php namespace Extend\Alipay; class Alipay { public function pay($alipay_config,$args){ /**************************請求引數**************************/ //支付型別 $payment_type = "1"; //必填,不能修改 //伺服器非同步通知頁面路徑 $notify_url = $args['notify_url']; //需http://格式的完整路徑,不能加?id=123這類自定義引數 //頁面跳轉同步通知頁面路徑 $return_url = $args['return_url']; //需http://格式的完整路徑,不能加?id=123這類自定義引數,不能寫成http://localhost/ //商戶訂單號 $out_trade_no = $args['out_trade_no']; //商戶網站訂單系統中唯一訂單號,必填 //訂單名稱 $subject = "測試"; //必填 //付款金額 $total_fee = $args['total']; //必填 //訂單描述 $body = "test"; //需以http://開頭的完整路徑,例如:http://www.商戶網址.com/myorder.html //防釣魚時間戳 $anti_phishing_key = ""; //若要使用請呼叫類檔案submit中的query_timestamp函式 //客戶端的IP地址 $exter_invoke_ip = ""; //非區域網的外網IP地址,如:221.0.0.1 /************************************************************/ //構造要請求的引數陣列,無需改動 $parameter = array( "service" => "create_direct_pay_by_user", "partner" => trim($alipay_config['partner']), "seller_id" => trim($alipay_config['seller_id']), "payment_type" => $payment_type, "notify_url" => $notify_url, "return_url" => $return_url, "out_trade_no" => $out_trade_no, "subject" => $subject, "total_fee" => $total_fee, "body" => $body, "show_url" => $show_url, "anti_phishing_key" => $anti_phishing_key, "exter_invoke_ip" => $exter_invoke_ip, "_input_charset" => trim(strtolower($alipay_config['input_charset'])) ); //建立請求 $alipaySubmit = new lib\AlipaySubmit($alipay_config); $html_text = $alipaySubmit->buildRequestForm($parameter,"get", "確認"); echo $html_text; } }
然後新建控制器TextController.class.php
然後<?php namespace Home\Controller; use Think\Controller; use \Extend\Alipay as Alipays; class TextController extends Controller { public function index(){ $this->display(); } public function dobuy(){ $out_trade_no = date('YmdHis'); $baseurl = 'http://'.$_SERVER['HTTP_HOST']; $args = array( 'out_trade_no'=>$out_trade_no, 'notify_url'=> $baseurl.'/index.php/Home/Text/notifyurl.html', 'return_url'=> $baseurl.'/index.php/Home/Text/returnurl.html', 'total'=> $_POST['WIDtotal_fee'], ); $s = new Alipays\Alipay(); $s->pay(C('alipay'),$args); } // 同步跳轉 public function returnurl(){ $alipay_config = C('alipay'); //計算得出通知驗證結果 $alipayNotify = new Alipays\lib\AlipayNotify($alipay_config); $verify_result = $alipayNotify->verifyReturn(); if($verify_result) {//驗證成功 //商戶訂單號 $out_trade_no = $_GET['out_trade_no']; //支付寶交易號 $trade_no = $_GET['trade_no']; //交易狀態 $trade_status = $_GET['trade_status']; if($_GET['trade_status'] == 'TRADE_FINISHED' || $_GET['trade_status'] == 'TRADE_SUCCESS') { //交易成功 }else { echo "trade_status=".$_GET['trade_status']; } echo "驗證成功<br />"; }else { //驗證失敗 //如要除錯,請看alipay_notify.php頁面的verifyReturn函式 echo "驗證失敗"; } } // 非同步跳轉 public function notifyurl(){ $alipay_config = C('alipay'); //計算得出通知驗證結果 $alipayNotify = new Alipays\AlipayNotify($alipay_config); $verify_result = $alipayNotify->verifyNotify(); if($verify_result) {//驗證成功 $out_trade_no = $_POST['out_trade_no']; //支付寶交易號 $trade_no = $_POST['trade_no']; //交易狀態 $trade_status = $_POST['trade_status']; if($_POST['trade_status'] == 'TRADE_FINISHED'||$_POST['trade_status'] == 'TRADE_SUCCESS') { //交易成功 } echo "success"; //請不要修改或刪除 } else { //驗證失敗 echo "fail"; //除錯用,寫文字函式記錄程式執行情況是否正常 //logResult("這裡寫入想要除錯的程式碼變數值,或其他執行的結果記錄"); } } }
這樣就成功完成簡單的支付功能了小白,共勉!