1. 程式人生 > >php接入支付寶介面以及嵌入thinkphp框架

php接入支付寶介面以及嵌入thinkphp框架

最近在寫個需要簡單支付的小專案,用到了支付寶介面,現已完成。把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 有改動
<?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;
    }
}
在config.php配置檔案裡配置引數
然後新建控制器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("這裡寫入想要除錯的程式碼變數值,或其他執行的結果記錄");
        }
    }
}
然後
這樣就成功完成簡單的支付功能了小白,共勉!