天天看點

ThinkPHP3.2.3整合支付寶接口

擴充類名為alipay,從我的下載下傳資源中下載下傳,下載下傳後放置在\ThinkPHP\Library\Vendor檔案夾下

下載下傳位址:http://download.csdn.net/download/leejianjun/10025194

有個檔案cacert.pem,放置在與入口檔案index.php的同一檔案夾下

可以在PHP版demo中找找,或者在CSDN中搜一搜,也可以到我的下載下傳資源中尋找。

核心代碼如下:

//支付寶充值 支付到支付寶,傳回資訊,寫入member表中
public function alipay(){
    //以下為配置資訊
    //合作身份者id,以2088開頭的16位純數字
    $alipay_config['partner']		= '2088************';
    //收款支付寶賬号,一般情況下收款賬号就是簽約賬号
    $alipay_config['seller_email']	= '********@**.com';
    //安全檢驗碼,以數字和字母組成的32位字元
    $alipay_config['key']			= '***********';
    //↑↑↑↑↑↑↑↑↑↑請在這裡配置您的基本資訊↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
    //簽名方式 不需修改
    $alipay_config['sign_type']    = strtoupper('MD5');
    //字元編碼格式 目前支援 gbk 或 utf-8
    $alipay_config['input_charset']= strtolower('utf-8');
    //ca證書路徑位址,用于curl中ssl校驗
    //請保證cacert.pem檔案在目前檔案夾目錄中
    $alipay_config['cacert']    = getcwd().'\\cacert.pem';
    //通路模式,根據自己的伺服器是否支援ssl通路,若支援請選擇https;若不支援請選擇http
    $alipay_config['transport']    = 'http';
    //以下開始操作
    vendor('Alipay.Corefunction');
    vendor('Alipay.Md5function');
    vendor('Alipay.Notify');
    vendor('Alipay.Submit');
    //支付類型
    $payment_type = "1";
    //必填,不能修改
    //伺服器異步通知頁面路徑
    $notify_url = SELF_URL."/Buy/step/notify_url";
    //需http://格式的完整路徑,不能加?id=123這類自定義參數
    //頁面跳轉同步通知頁面路徑
    $return_url = SELF_URL."/Buy/step/return_url";   //目前為同步通知
    //需http://格式的完整路徑,不能加?id=123這類自定義參數,不能寫成http://localhost/
    //*****************************送出的商戶資訊**************************************
    //商戶訂單号
    $amount=0.01;
    $out_trade_no =date('YmdHis').rand(001,999);
    session($out_trade_no,$amount);
    //商戶網站訂單系統中唯一訂單号,必填
    //訂單名稱
    $subject = '充值'.$amount.'元到XX網站';
    //必填
    //付款金額
    $total_fee =$amount;
    //必填
    //訂單描述
    $body = $subject;
    //商品展示位址
    $show_url =SELF_URL.'/Buy/step/complete';
    //需以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_email" => trim($alipay_config['seller_email']),
        "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 \AlipaySubmit($alipay_config);
    //$html_text = $alipaySubmit->buildRequestForm($parameter,"get", "确認");
    $html_text = $alipaySubmit->buildRequestForm($parameter,"get", "");
    echo $html_text;
}
//
public function notify_url(){
    //以下為配置資訊
    //合作身份者id,以2088開頭的16位純數字
    $alipay_config['partner']		= '***********';
    //收款支付寶賬号,一般情況下收款賬号就是簽約賬号
    $alipay_config['seller_email']	= '******@***.com';
    //安全檢驗碼,以數字和字母組成的32位字元
    $alipay_config['key']			= '**************';
    //↑↑↑↑↑↑↑↑↑↑請在這裡配置您的基本資訊↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
    //簽名方式 不需修改
    $alipay_config['sign_type']    = strtoupper('MD5');
    //字元編碼格式 目前支援 gbk 或 utf-8
    $alipay_config['input_charset']= strtolower('utf-8');
    //ca證書路徑位址,用于curl中ssl校驗
    //請保證cacert.pem檔案在目前檔案夾目錄中
    $alipay_config['cacert']    = getcwd().'\\cacert.pem';
    //通路模式,根據自己的伺服器是否支援ssl通路,若支援請選擇https;若不支援請選擇http
    $alipay_config['transport']    = 'http';
    vendor('Alipay.Corefunction');
    vendor('Alipay.Md5function');
    vendor('Alipay.Notify');
    vendor('Alipay.Submit');
    //計算得出通知驗證結果
    $alipayNotify = new \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') {
            //判斷該筆訂單是否在商戶網站中已經做過處理
            //如果沒有做過處理,根據訂單号(out_trade_no)在商戶網站的訂單系統中查到該筆訂單的詳細,并執行商戶的業務程式
            //請務必判斷請求時的total_fee、seller_id與通知時擷取的total_fee、seller_id為一緻的
            //如果有做過處理,不執行商戶的業務程式
            //注意:
            //退款日期超過可退款期限後(如三個月可退款),支付寶系統發送該交易狀态通知
            //調試用,寫文本函數記錄程式運作情況是否正常
            //logResult("這裡寫入想要調試的代碼變量值,或其他運作的結果記錄");
        }
        else if ($_POST['trade_status'] == 'TRADE_SUCCESS') {
            //判斷該筆訂單是否在商戶網站中已經做過處理
            //如果沒有做過處理,根據訂單号(out_trade_no)在商戶網站的訂單系統中查到該筆訂單的詳細,并執行商戶的業務程式
            //請務必判斷請求時的total_fee、seller_id與通知時擷取的total_fee、seller_id為一緻的
            //如果有做過處理,不執行商戶的業務程式
            //注意:
            //付款完成後,支付寶系統發送該交易狀态通知
            //調試用,寫文本函數記錄程式運作情況是否正常
            //logResult("這裡寫入想要調試的代碼變量值,或其他運作的結果記錄");
        }
        //——請根據您的業務邏輯來編寫程式(以上代碼僅作參考)——
        echo "success";		//請不要修改或删除
        /
    }
    else {
        //驗證失敗
        echo "fail";
        //調試用,寫文本函數記錄程式運作情況是否正常
        //logResult("這裡寫入想要調試的代碼變量值,或其他運作的結果記錄");
    }
}
public function return_url(){
    //以下為配置資訊
    //合作身份者id,以2088開頭的16位純數字
    $alipay_config['partner']		= '2088**********';
    //收款支付寶賬号,一般情況下收款賬号就是簽約賬号
    $alipay_config['seller_email']	= '********@***.com';
    //安全檢驗碼,以數字和字母組成的32位字元
    $alipay_config['key']			= '*************';
    //↑↑↑↑↑↑↑↑↑↑請在這裡配置您的基本資訊↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
    //簽名方式 不需修改
    $alipay_config['sign_type']    = strtoupper('MD5');
    //字元編碼格式 目前支援 gbk 或 utf-8
    $alipay_config['input_charset']= strtolower('utf-8');
    //ca證書路徑位址,用于curl中ssl校驗
    //請保證cacert.pem檔案在目前檔案夾目錄中
    $alipay_config['cacert']    = getcwd().'\\cacert.pem';
    //通路模式,根據自己的伺服器是否支援ssl通路,若支援請選擇https;若不支援請選擇http
    $alipay_config['transport']    = 'http';
    vendor('Alipay.Corefunction');
    vendor('Alipay.Md5function');
    vendor('Alipay.Notify');
    vendor('Alipay.Submit');
    //計算得出通知驗證結果
    $alipayNotify = new \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') {
            //判斷該筆訂單是否在商戶網站中已經做過處理
            //如果沒有做過處理,根據訂單号(out_trade_no)在商戶網站的訂單系統中查到該筆訂單的詳細,并執行商戶的業務程式
            //如果有做過處理,不執行商戶的業務程式
        }
        else {
            echo "trade_status=".$_GET['trade_status'];
        }
        //echo "驗證成功<br />";
        //***************************************支付成功後的代碼**********************************************
        //此處代碼修改為事務
        $amount=addslashes($_GET['total_fee']);
        //echo $amount;exit;
        header("location: ".SELF_URL."/Buy/step/complete/amount/".$amount);exit;
        
    }
    else {
        //驗證失敗
        //如要調試,請看alipay_notify.php頁面的verifyReturn函數
        echo "驗證失敗";
    }
}
           
ThinkPHP3.2.3整合支付寶接口

有圖有真相

ThinkPHP3.2.3整合支付寶接口