Tinkphp 支付寶支付教程

我是把支付寶的文件放到了這個文件夾下

圖片.png

下載地址:
鏈接:http://pan.baidu.com/s/1nveAZvN 密碼:l9kv

config.php 配置信息

//支付寶配置信息  基本上是復(fù)制的alipay.config.php里的
    'ALIPLAY'=>array(
        //↓↓↓↓↓↓↓↓↓↓請在這里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
        //合作身份者ID,簽約賬號,以2088開頭由16位純數(shù)字組成的字符串,查看地址:https://b.alipay.com/order/pidAndKey.htm
        'partner'       => '填寫自己的',
        //收款支付寶賬號,以2088開頭由16位純數(shù)字組成的字符串,一般情況下收款賬號就是簽約賬號
        'seller_id' => '填寫自己的',
        // MD5密鑰,安全檢驗碼,由數(shù)字和字母組成的32位字符串,查看地址:https://b.alipay.com/order/pidAndKey.htm
        'key'   => '填寫自己的',
        //↑↑↑↑↑↑↑↑↑↑請在這里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑


        //↓↓↓↓↓↓↓↓↓↓ 以下信息不要修改 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
        //簽名方式
        'sign_type'    => strtoupper('MD5'),
        //字符編碼格式 目前支持 gbk 或 utf-8
        'input_charset'=> strtolower('utf-8'),
        //ca證書路徑地址,用于curl中ssl校驗
        //請保證cacert.pem文件在當(dāng)前文件夾目錄中
        //'cacert'    => getcwd().'\\cacert.pem',   //getcwd 獲取當(dāng)前文件的文件夾磁盤路徑
        'cacert'    => realpath(APP_PATH).'\\Libaray\\alipay\\cacert.pem',//改成和我們的alipay的類的目錄

        //訪問模式,根據(jù)自己的服務(wù)器是否支持ssl訪問,若支持請選擇https;若不支持請選擇http
        'transport'    => 'http',
        // 支付類型 ,無需修改
        'payment_type' => "1",
        // 產(chǎn)品類型,無需修改
        'service' => "create_direct_pay_by_user",

        //↓↓↓↓↓↓↓↓↓↓ 請在這里配置防釣魚信息,如果沒開通防釣魚功能,為空即可 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
        // 防釣魚時間戳  若要使用請調(diào)用類文件submit中的query_timestamp函數(shù)
        'anti_phishing_key' => "",
        // 客戶端的IP地址 非局域網(wǎng)的外網(wǎng)IP地址,如:221.0.0.1
        'exter_invoke_ip' => "",
        //↑↑↑↑↑↑↑↑↑↑請在這里配置防釣魚信息,如果沒開通防釣魚功能,為空即可 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
    )

調(diào)用支付寶

public function index(){

        //調(diào)用支付寶
        // import("Libaray/alipay/config.php");//配置文件
        $alipay_config=C('ALIPLAY');//這里我們把配置文件放在了咱們的統(tǒng)一配置信息文件里
        import("Libaray/alipay/alipay_submit");//調(diào)用支付頁面
        // 服務(wù)器異步通知頁面路徑  需http://格式的完整路徑,不能加?id=123這類自定義參數(shù),必須外網(wǎng)可以正常訪問
        $alipay_config['notify_url'] = "http://".$_SERVER['HTTP_HOST'].U('Alipay/notify_url');

        // 頁面跳轉(zhuǎn)同步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義參數(shù),必須外網(wǎng)可以正常訪問
        $alipay_config['return_url'] = "http://".$_SERVER['HTTP_HOST'].U('Alipay/return_url');


        /**************************請求參數(shù)**************************/

        //------------訂單信息,這里要根據(jù)我們自己的業(yè)務(wù)邏輯來寫,我們?nèi)?shù)據(jù)庫查



        //商戶訂單號,商戶網(wǎng)站訂單系統(tǒng)中唯一訂單號,必填
        $out_trade_no =rand(1000,9999);//測試用的隨機數(shù)
        //訂單名稱,必填
        $subject = '這是你下的訂單';

        //付款金額,必填
        $total_fee = 0.01;//測試0.01

        //商品描述,可空
        $body = '這是我的訂單';

        /************************************************************/

        //構(gòu)造要請求的參數(shù)數(shù)組,無需改動
        $parameter = array(
            "service"       => $alipay_config['service'],
            "partner"       => $alipay_config['partner'],
            "seller_id"  => $alipay_config['seller_id'],
            "payment_type"  => $alipay_config['payment_type'],
            "notify_url"    => $alipay_config['notify_url'],
            "return_url"    => $alipay_config['return_url'],

            "anti_phishing_key"=>$alipay_config['anti_phishing_key'],
            "exter_invoke_ip"=>$alipay_config['exter_invoke_ip'],
            "out_trade_no"  => $out_trade_no,
            "subject"   => $subject,
            "total_fee" => $total_fee,
            "body"  => $body,
            "_input_charset"    => trim(strtolower($alipay_config['input_charset']))
            //其他業(yè)務(wù)參數(shù)根據(jù)在線開發(fā)文檔,添加參數(shù).文檔地址:https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.kiX33I&treeId=62&articleId=103740&docType=1
            //如"參數(shù)名"=>"參數(shù)值"

        );

        //建立請求
        $alipaySubmit = new \AlipaySubmit($alipay_config);
        $html_text = $alipaySubmit->buildRequestForm($parameter,"get", "確認");
        echo $html_text;

    }

支付成功回調(diào)地址 異步通知

/**
     * 支付成功回調(diào)地址
     * 異步通知
     */
    public function notify_url(){
        /* //------------這兩行代碼改成咱們項目的引入形式
        require_once("alipay.config.php");
        require_once("lib/alipay_notify.class.php");
        */
        $alipay_config=C('ALIPLAY');//這里我們把配置文件放在了咱們的統(tǒng)一配置信息文件里
        import("Libaray/alipay/alipay_notify");

        //計算得出通知驗證結(jié)果
        $alipayNotify = new \AlipayNotify($alipay_config);
        $verify_result = $alipayNotify->verifyNotify();

        if($verify_result) {//驗證成功
            /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            //請在這里加上商戶的業(yè)務(wù)邏輯程序代


            //——請根據(jù)您的業(yè)務(wù)邏輯來編寫程序(以下代碼僅作參考)——

            //獲取支付寶的通知返回參數(shù),可參考技術(shù)文檔中服務(wù)器異步通知參數(shù)列表

            //商戶訂單號(傳過去的會員附表的id)
            $out_trade_no = $_POST['out_trade_no'];

            //支付寶交易號
            $trade_no = $_POST['trade_no'];

            //交易狀態(tài)
            $trade_status = $_POST['trade_status'];


            if($_POST['trade_status'] == 'TRADE_FINISHED') {
                //判斷該筆訂單是否在商戶網(wǎng)站中已經(jīng)做過處理
                //如果沒有做過處理,根據(jù)訂單號(out_trade_no)在商戶網(wǎng)站的訂單系統(tǒng)中查到該筆訂單的詳細,并執(zhí)行商戶的業(yè)務(wù)程序
                //請務(wù)必判斷請求時的total_fee、seller_id與通知時獲取的total_fee、seller_id為一致的
                //如果有做過處理,不執(zhí)行商戶的業(yè)務(wù)程序

                //注意:
                //退款日期超過可退款期限后(如三個月可退款),支付寶系統(tǒng)發(fā)送該交易狀態(tài)通知

                //調(diào)試用,寫文本函數(shù)記錄程序運行情況是否正常
                //logResult("這里寫入想要調(diào)試的代碼變量值,或其他運行的結(jié)果記錄");
            }
            else if ($_POST['trade_status'] == 'TRADE_SUCCESS') {
                //判斷該筆訂單是否在商戶網(wǎng)站中已經(jīng)做過處理
                //如果沒有做過處理,根據(jù)訂單號(out_trade_no)在商戶網(wǎng)站的訂單系統(tǒng)中查到該筆訂單的詳細,并執(zhí)行商戶的業(yè)務(wù)程序
                //請務(wù)必判斷請求時的total_fee、seller_id與通知時獲取的total_fee、seller_id為一致的
                //如果有做過處理,不執(zhí)行商戶的業(yè)務(wù)程序

                //------------我們的業(yè)務(wù)邏輯代碼:根據(jù)支付寶傳來的訂單號去咱們的數(shù)據(jù)庫中查找該訂單的支付狀態(tài),如果是未支付狀態(tài),改為已支付狀態(tài)


                //------------我們的業(yè)務(wù)邏輯代碼結(jié)束

                //注意:
                //付款完成后,支付寶系統(tǒng)發(fā)送該交易狀態(tài)通知

                //調(diào)試用,寫文本函數(shù)記錄程序運行情況是否正常
                //logResult("這里寫入想要調(diào)試的代碼變量值,或其他運行的結(jié)果記錄");
            }

            //——請根據(jù)您的業(yè)務(wù)邏輯來編寫程序(以上代碼僅作參考)——

            echo "success";     //請不要修改或刪除

            /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        }
        else {
            //驗證失敗
            echo "fail";

            //調(diào)試用,寫文本函數(shù)記錄程序運行情況是否正常
            //logResult("這里寫入想要調(diào)試的代碼變量值,或其他運行的結(jié)果記錄");
        }
    }

支付成功回調(diào)地址 同步通知

/**
     * 支付成功回調(diào)地址
     * 同步通知
     */

    public function return_url()
    {
        /* //------------這兩行代碼改成咱們項目的引入形式
       require_once("alipay.config.php");
       require_once("lib/alipay_notify.class.php");
       */
        $alipay_config=C('ALIPLAY');//這里我們把配置文件放在了咱們的統(tǒng)一配置信息文件里
        import("Libaray/alipay/alipay_notify");
        //計算得出通知驗證結(jié)果
        $alipayNotify = new \AlipayNotify($alipay_config);
        $verify_result = $alipayNotify->verifyReturn();
        if($verify_result) {//驗證成功
            /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            //請在這里加上商戶的業(yè)務(wù)邏輯程序代碼

            //——請根據(jù)您的業(yè)務(wù)邏輯來編寫程序(以下代碼僅作參考)——
            //獲取支付寶的通知返回參數(shù),可參考技術(shù)文檔中頁面跳轉(zhuǎn)同步通知參數(shù)列表

            //商戶訂單號
            $out_trade_no = $_GET['out_trade_no'];

            //支付寶交易號
            $trade_no = $_GET['trade_no'];

            //交易狀態(tài)
            $trade_status = $_GET['trade_status'];


            if($_GET['trade_status'] == 'TRADE_FINISHED' || $_GET['trade_status'] == 'TRADE_SUCCESS') {
                //判斷該筆訂單是否在商戶網(wǎng)站中已經(jīng)做過處理
                //如果沒有做過處理,根據(jù)訂單號(out_trade_no)在商戶網(wǎng)站的訂單系統(tǒng)中查到該筆訂單的詳細,并執(zhí)行商戶的業(yè)務(wù)程序
                //如果有做過處理,不執(zhí)行商戶的業(yè)務(wù)程序

                //------------我們的業(yè)務(wù)邏輯代碼:和前面方法notify_url里一樣

                //------------我們的業(yè)務(wù)邏輯代碼結(jié)束

            }
            else {
                echo "trade_status=".$_GET['trade_status'];
            }

            echo "驗證成功<br />";

            //——請根據(jù)您的業(yè)務(wù)邏輯來編寫程序(以上代碼僅作參考)——

            /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        }
        else {
            //驗證失敗
            //如要調(diào)試,請看alipay_notify.php頁面的verifyReturn函數(shù)
            echo "驗證失敗";
        }
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容