thinkphp3.2整合銀聯手機網頁支付

1.和銀聯簽約,簽約成功之後才進行技術集成,到銀聯官方下載手機網頁支付的技術文檔和demo代碼;

https://open.unionpay.com/ajweb/help/file/techFile?productId=66

demo裏面有個readme.txt會告訴你要修改哪些東西


2.同樣,如果遇到和支付寶一樣的驗籤失敗,原因很可能就是證書有問題,還有,測試環境手機網頁打開之後會老是提示證書不受信任,轉生產之後就不會,建議一開始就用生成環境,怎麼轉可以參考https://open.unionpay.com/ajweb/help/faq/list?id=39&level=0&from=0


3.測試可以完成支付,就可以直接把代碼庫

移植到thinkphp的以下文件路徑中


4.當然還需要把需要用到的證書copy的工程中,配置文件中需要改變一下證書的路徑,都是絕對路徑來的。


5.直接引入php文件就可以進行支付了。

<?php
namespace Mobile\Action;
class UnionPayAction extends BaseAction{

    public function doPay(){
        vendor('UnionPayMobile.common');
        vendor('UnionPayMobile.SDKConfig');
        vendor('UnionPayMobile.secureUtil');
        vendor('UnionPayMobile.PhpLog');
        $log = new \PhpLog( SDK_LOG_FILE_PATH, "PRC", SDK_LOG_LEVEL );
        $log->LogInfo ( "============處理前臺請求開始===============" );
        //獲取商戶訂單的信息,填寫信息提交到支付寶訂單
        $data = M('orders')->where('order_id='.session('orderID'))->find();
        $sum = $data['order_sum_all']*100;
        // 初始化日誌
        $params = array(
        'version' => '5.0.0',               //版本號
        'encoding' => 'utf-8',              //編碼方式
        'certId' => getSignCertId (),           //證書ID
        'txnType' => '01',              //交易類型  
        'txnSubType' => '01',               //交易子類
        'bizType' => '000201',              //業務類型
        'frontUrl' =>  SDK_FRONT_NOTIFY_URL,        //前臺通知地址
        'backUrl' => SDK_BACK_NOTIFY_URL,       //後臺通知地址    
        'signMethod' => '01',       //簽名方法
        'channelType' => '08',      //渠道類型,07-PC,08-手機
        'accessType' => '0',        //接入類型
        'merId' => '',               //商戶代碼,請改自己的商戶號
        'orderId' => $data['order_num'],  //商戶訂單號
        'txnTime' => date('YmdHis'),    //訂單發送時間
        'txnAmt' => $sum,       //交易金額,單位分
        'currencyCode' => '156',    //交易幣種
        'defaultPayType' => '0001', //默認支付方式    
        //'orderDesc' => '訂單描述',  //訂單描述,網關支付和wap支付暫時不起作用
        'reqReserved' =>' 透傳信息', //請求方保留域,透傳字段,查詢、通知、對賬文件中均會原樣出現
        );
        // 簽名
        sign ( $params );
        // 前臺請求地址
        $front_uri = SDK_FRONT_TRANS_URL;
        $log->LogInfo ( "前臺請求地址爲>" . $front_uri );
        // 構造 自動提交的表單
        $html_form = create_html ( $params, $front_uri );

        $log->LogInfo ( "-------前臺交易自動提交表單>--begin----" );
        $log->LogInfo ( $html_form );
        $log->LogInfo ( "-------前臺交易自動提交表單>--end-------" );
        $log->LogInfo ( "============處理前臺請求 結束===========" );
        echo $html_form;
    }
    
        /******************************
        服務器同步通知頁面方法
        其實這裏就是將notify_url.php文件中的代碼複製過來進行處理
        
        *******************************/
    function createNote(){
        vendor('UnionPayMobile.common');
        vendor('UnionPayMobile.SDKConfig');
        vendor('UnionPayMobile.secureUtil');
        vendor('UnionPayMobile.PhpLog');
        $log = new \PhpLog( SDK_LOG_FILE_PATH, "PRC", SDK_LOG_LEVEL );
        if (isset ( $_POST ['signature'] )) { 
            if(verify ( $_POST )){
                //改變訂單狀態,處理後臺的訂單邏輯
                
            }

        } else {
            echo '簽名爲空';
        }
    }
     /******************************
        服務器異步通知頁面方法
        其實這裏就是將notify_url.php文件中的代碼複製過來進行處理
        
        *******************************/
    function sureNote(){
        vendor('UnionPayMobile.common');
        vendor('UnionPayMobile.SDKConfig');
        vendor('UnionPayMobile.secureUtil');
        vendor('UnionPayMobile.PhpLog');
        $log = new \PhpLog( SDK_LOG_FILE_PATH, "PRC", SDK_LOG_LEVEL );
       foreach ( $_POST as $key => $val ) {
         P(isset($mpi_arr[$key]) ?$mpi_arr[$key] : $key);
         P($val);
       }
       if (isset ( $_POST ['signature'] )) { 
            P(verify ( $_POST ) ? '驗籤成功' : '驗籤失敗');
            P($orderId = $_POST ['orderId']); //其他字段也可用類似方式獲取
            //改變訂單狀態,處理後臺的訂單邏輯    
        } else {
            echo '簽名爲空';
        }
    }
   
}
?>
寫了一個集成的demo,改修改的東西,在README.md中有簡單介紹。





下載鏈接http://download.csdn.net/detail/zhengxiaojunkite/9379301




發佈了74 篇原創文章 · 獲贊 15 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章