my_ip(); header('Location: http://192.168.10.201/qcar2.html'); exit; parent::__construct(); // ----- 程式開發階段log設定 ----- if (@ENVIRONMENT == 'development') { ini_set('display_errors', '1'); //error_reporting(E_ALL ^ E_NOTICE); error_reporting(E_ALL); } set_error_handler(array($this, 'error_handler'), E_ALL); // 資料庫異動需做log /* // 共用記憶體 $this->vars['mcache'] = new Memcache; $this->vars['mcache']->connect(MEMCACHE_HOST, MEMCACHE_POST) or die ('Could not connect memcache'); // mqtt subscribe $this->vars['mqtt'] = new phpMQTT(MQ_HOST, MQ_POST, 'cario'); if(!$this->vars['mqtt']->connect()){ die ('Could not connect mqtt'); } */ // ----- 定義常數(路徑, cache秒數) ----- define('APP_VERSION', '100'); // 版本號 define('MAX_AGE', 604800); // cache秒數, 此定義1個月 define('APP_NAME', 'qcar'); // 應用系統名稱 define('PAGE_PATH', APP_BASE.'ci_application/views/'.APP_NAME.'/'); // path of views define('SERVER_URL', 'http://'.(isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : 'localhost').'/'); // URL define('APP_URL', SERVER_URL.APP_NAME.'.html/'); // controller路徑 define('WEB_URL', SERVER_URL.APP_NAME.'/'); // 網頁路徑 define('WEB_LIB', SERVER_URL.'libs/'); // 網頁lib define('BOOTSTRAPS', WEB_LIB.'bootstrap_sb/'); // bootstrap lib define('LOG_PATH', FILE_BASE.APP_NAME.'/logs/'); // log path $this->load->model('qcar_model'); $this->load->model('payment_ats_model'); // 繳費 $this->load->model('allpay_invoice_model'); // 歐付寶電子發票 define('MAIN_PAGE', "main_page"); define('RESULT_PAGE', "result_page"); // ----- 行動支付, 繳費機告知已付款 ----- define('ALTOB_ATS2PAYED', "http://localhost/carpayment.html/ats2payed"); // ----- 行動支付, 繳費機告知已付款 (end) ----- // ----- 歐付寶金流 ----- define('ALLPAY_PAYMENT_TX_BILL_ATS', SERVER_URL."allpay_payment.html/transfer_money_tx_bill_ats"); // 歐付寶付款系統連結 define('ALLPAY_ClientBackURL', APP_URL."client_back/"); // 您要歐付寶返回按鈕導向的瀏覽器端網址"; define('ALLPAY_OrderResultURL', APP_URL."order_result/"); // 您要收到付款完成通知的瀏覽器端網址(browser) ps. WebATM大部份銀行都回不來; define('ALLPAY_AltobServiceURL', APP_URL."payment_completed_handler/"); // 付款完成後被通知的位址 // ----- 歐付寶金流 (end) ----- } // 取得 IP function my_ip() { if (getenv('HTTP_X_FORWARDED_FOR')) { $ip = getenv('HTTP_X_FORWARDED_FOR'); } elseif (getenv('HTTP_X_REAL_IP')) { $ip = getenv('HTTP_X_REAL_IP'); } else { $ip = $_SERVER['REMOTE_ADDR']; } return $ip; } // 發生錯誤時集中在此處理 public function error_handler($errno, $errstr, $errfile, $errline, $errcontext) { // ex: car_err://message.... //$log_msg = explode('://', $errstr); /* if (count($log_msg) > 1) { $log_file = LOG_PATH.$log_msg[0]; $str = date('H:i:s')."|{$log_msg[1]}|{$errfile}|{$errline}|{$errno}\n"; } else { $log_file = LOG_PATH.APP_NAME; $str = date('H:i:s')."|{$errstr}|{$errfile}|{$errline}|{$errno}\n"; } */ $str = date('H:i:s')."|{$errstr}|{$errfile}|{$errline}|{$errno}\n"; //error_log($str, 3, $log_file . '.' . date('Ymd').'.log.txt'); // 3代表參考後面的檔名 error_log($str, 3, LOG_PATH.APP_NAME . '.' . date('Ymd').'.log.txt'); // 3代表參考後面的檔名 } // 顯示靜態網頁(html檔) protected function show_page($page_name, $data = null) { $page_file = PAGE_PATH.$page_name.'.php'; $last_modified_time = filemtime($page_file); // 若檔案修改時間沒有異動, 或版本無異動, 通知瀏覽器使用cache, 不再下傳網頁 header('Cache-Control:max-age='.MAX_AGE); // cache 1個月 header('Last-Modified: '.gmdate('D, d M Y H:i:s', $last_modified_time).' GMT'); header('Etag: '. APP_VERSION); header('Cache-Control: public'); if (!empty($_SERVER['HTTP_IF_NONE_MATCH']) && $_SERVER['HTTP_IF_NONE_MATCH'] == APP_VERSION && @strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) == $last_modified_time) { header('HTTP/1.1 304 Not Modified'); } else { $this->load->view(APP_NAME.'/'.$page_name, $data); } } public function index() { $this->show_page('main_page'); } // 顯示logs public function show_logs() { $lines = $this->uri->segment(3); // 顯示行數 if (empty($lines)) $lines = 40; // 無行數參數, 預設為40行 // echo '
';
        echo '
';
		passthru('/usr/bin/tail -n ' . $lines . '  ' . LOG_FILE);		// 利用linux指令顯示倒數幾行的logs內容
        echo "\n----- " . LOG_FILE . ' -----';
        echo '
'; } // 付款 - 1.繳月租 public function payment_lpr() { $payment_lpr = $this->input->post('payment_lpr', true); $data = $this->payment_ats_model->create_member_bill($payment_lpr); echo json_encode($data, JSON_UNESCAPED_UNICODE); } // 付款 - 2.確定繳費 public function transfer_money() { $order_no = strtoupper($this->uri->segment(3)); // 交易序號 $invoice_receiver = urldecode($this->uri->segment(4)); // 載具編號 (可有可無) $company_no = urldecode($this->uri->segment(5)); // 公司統編 (可有可無) $email_base64 = $this->uri->segment(6); // 電子信箱 $mobile = $this->uri->segment(7); // 手機號碼 // decode email if(strlen($email_base64) > 0){ $email = base64_decode($email_base64.'='); // base64字串尾端的'='還原 }else{ $email = email_base64; } $this->payment_ats_model-> // 開始進行繳交帳單 pay_bill($order_no, $invoice_receiver, $company_no, $email, $mobile, ALLPAY_ClientBackURL, ALLPAY_OrderResultURL, ALLPAY_AltobServiceURL, 52); // 交易種類: 0:未定義, 1:現金, 40:博辰人工模組, 41:博辰自動繳費機, 50:歐付寶轉址刷卡, 51:歐付寶APP, 52:歐付寶轉址WebATM, 60:中國信託刷卡轉址 // 轉址歐付寶付款系統 echo file_get_contents(ALLPAY_PAYMENT_TX_BILL_ATS."/{$order_no}"); } // L.1 付款完成 (限制存取) public function payment_completed_handler() { $order_no = $this->uri->segment(3); // 交易序號 $data = $this->payment_ats_model->get_tx_bill($order_no); if (! empty($data)) { $order_no = $data['order_no']; $station_no = $data['station_no']; $lpr = $data['lpr']; $amt = $data['amt']; $status = $data['status']; switch($status){ case 1: // 狀態: 0:剛建立, 1:結帳完成, 2:錢沒對上, 3:發票沒建立, 4:手動調整, 99:訂單逾期作廢, 100:交易進行中, 111:產品已領取 // 開立歐付寶電子發票 $this->allpay_invoice_model->invoice_issue_for_tx_bill_ats($order_no, $amt); // 記錄為已領取 $this->payment_ats_model->transfer_money_done_and_finished($order_no); // 繳費機告知已付款 // http://localhost/carpayment.html/ats2payed/車牌/金額/場站編號/序號/MD5 // md5(車牌.金額.場站編號.序號) $md5 = md5($lpr.$amt.$station_no.$order_no); file_get_contents(ALTOB_ATS2PAYED."/{$lpr}/{$amt}/{$station_no}/{$order_no}/{$md5}"); default: // 尚未結帳完成, 或是已領取 trigger_error(APP_NAME.', '.__FUNCTION__.', order_no=>' . $order_no.'
'.' status != 1'); } } } // 歐付寶返回按鈕導向的瀏覽器端網址 public function client_back() { $this->show_page(MAIN_PAGE); } // 收到付款完成通知的瀏覽器端網址(browser) ps. WebATM大部份銀行都回不來 public function order_result() { $this->show_page(RESULT_PAGE); } // 車位查詢 public function q_pks() { $lpr = $this->input->post('lpr', true); $data = $this->qcar_model->q_pks($lpr); echo json_encode($data, JSON_UNESCAPED_UNICODE); } // 取得進場資訊 (模糊比對) public function q_fuzzy_pks() { $input = $this->input->post('fuzzy_input', true); $data = $this->qcar_model->q_fuzzy_pks($input); echo json_encode($data, JSON_UNESCAPED_UNICODE); } }