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);
}
}