| @@ -522,6 +522,44 @@ class Allpa_service extends CI_Controller | |||||
| file_get_contents(APP_URL."allpa_consume_handler/{$data["order_no"]}"); | file_get_contents(APP_URL."allpa_consume_handler/{$data["order_no"]}"); | ||||
| } | } | ||||
| } | } | ||||
| // 遠端歐PA卡流程 | |||||
| public function allpa_go_remote() | |||||
| { | |||||
| $in_time = $this->uri->segment(3); // 進場時間 | |||||
| $lpr = $this->uri->segment(4); // 車牌號碼 | |||||
| $station_no = $this->uri->segment(5); // 場站編號 | |||||
| $check_mac = $this->uri->segment(6); // 驗証欄位 | |||||
| // 驗証欄位 | |||||
| if($check_mac != md5($in_time. $lpr . $station_no)) | |||||
| { | |||||
| echo 'ck_error'; | |||||
| exit; | |||||
| } | |||||
| // 先檢查本地端是否為歐PA會員 | |||||
| $valid_user_ck = md5($lpr); | |||||
| $valid_user_result = $this->allpa_service_model->get_allpa_valid_user($lpr, $valid_user_ck); // check user | |||||
| if(!isset($valid_user_result['result_code']) || $valid_user_result['result_code'] != 0) | |||||
| { | |||||
| echo json_encode($valid_user_result, JSON_UNESCAPED_UNICODE); | |||||
| } | |||||
| else | |||||
| { | |||||
| $out_time = strtotime(date('Y-m-d H:i:s')); // 結帳時間 | |||||
| require_once(ALTOB_SYNC_FILE); | |||||
| $sync_agent = new AltobSyncAgent(); | |||||
| $sync_agent->init($station_no, $out_time); | |||||
| $sync_agent->in_time = $in_time; // 入場時間 | |||||
| $allpa_go_result = $sync_agent->allpa_go($lpr); | |||||
| trigger_error(__FUNCTION__ . "..$lpr|$in_time|$out_time.." . print_r($allpa_go_result, true)); | |||||
| echo $allpa_go_result; | |||||
| } | |||||
| } | |||||
| // L.2 歐Pa卡 - 非同步扣款 (限制存取) | // L.2 歐Pa卡 - 非同步扣款 (限制存取) | ||||
| public function allpa_consume_handler() | public function allpa_consume_handler() | ||||
| @@ -555,13 +593,15 @@ class Allpa_service extends CI_Controller | |||||
| // only test | // only test | ||||
| public function gen_test_link() | public function gen_test_link() | ||||
| { | { | ||||
| $in_time = strtotime("2016-03-29 16:50:00"); | |||||
| $lpr = "SAYLXXX"; | |||||
| $station_no = "12112"; | |||||
| $in_time = strtotime("2017-11-14 16:50:00"); | |||||
| $lpr = "TEST123"; | |||||
| $station_no = "12302"; | |||||
| echo "TEST: ".APP_URL."allpa_go/{$in_time}/{$lpr}/{$station_no}/".md5($in_time.$lpr.$station_no); | echo "TEST: ".APP_URL."allpa_go/{$in_time}/{$lpr}/{$station_no}/".md5($in_time.$lpr.$station_no); | ||||
| echo "<br/>"; | |||||
| echo "\n"; | |||||
| echo "TEST: ".APP_URL."get_allpa_valid_user/{$lpr}/".md5($lpr); | echo "TEST: ".APP_URL."get_allpa_valid_user/{$lpr}/".md5($lpr); | ||||
| echo "\n"; | |||||
| echo "TEST: ".APP_URL."allpa_go_remote/{$in_time}/{$lpr}/{$station_no}/".md5($in_time.$lpr.$station_no); | |||||
| header('Connection: close'); | header('Connection: close'); | ||||
| header('Content-Length: ' . ob_get_length()); | header('Content-Length: ' . ob_get_length()); | ||||
| @@ -365,6 +365,12 @@ class Carpark extends CI_Controller | |||||
| usleep(300000); // 0.3 sec delay | usleep(300000); // 0.3 sec delay | ||||
| // 歐pa卡同步 | |||||
| $result = $this->sync_data_model->sync_allpa_user($info); | |||||
| trigger_error(__FUNCTION__ . '..sync_allpa_user: '. $result); | |||||
| usleep(300000); // 0.3 sec delay | |||||
| // 在席資料同步 | // 在席資料同步 | ||||
| $result = $this->sync_data_model->sync_pks_groups_reload($station_setting); | $result = $this->sync_data_model->sync_pks_groups_reload($station_setting); | ||||
| trigger_error(__FUNCTION__ . '..sync_pks_groups_reload: '. $result); | trigger_error(__FUNCTION__ . '..sync_pks_groups_reload: '. $result); | ||||
| @@ -425,7 +431,6 @@ class Carpark extends CI_Controller | |||||
| { | { | ||||
| $this->sync_data_model->sync_switch_lpr($switch_lpr_arr); | $this->sync_data_model->sync_switch_lpr($switch_lpr_arr); | ||||
| } | } | ||||
| } | } | ||||
| // [API] 取得最新未結清 | // [API] 取得最新未結清 | ||||
| @@ -560,50 +560,62 @@ class Cars_model extends CI_Model | |||||
| { | { | ||||
| $in_time = strtotime($rows_cario['out_before_time']); | $in_time = strtotime($rows_cario['out_before_time']); | ||||
| $ck = md5($in_time. $parms['lpr'] . $parms['sno']); | $ck = md5($in_time. $parms['lpr'] . $parms['sno']); | ||||
| $jdata = file_get_contents("http://localhost/allpa_service.html/allpa_go/{$in_time}/{$parms['lpr']}/{$parms['sno']}/{$ck}"); | |||||
| //$jdata = file_get_contents("http://localhost/allpa_service.html/allpa_go/{$in_time}/{$parms['lpr']}/{$parms['sno']}/{$ck}"); | |||||
| $jdata = file_get_contents("http://localhost/allpa_service.html/allpa_go_remote/{$in_time}/{$parms['lpr']}/{$parms['sno']}/{$ck}"); | |||||
| trigger_error("allpa回傳:{$jdata}|{$in_time}/{$parms['lpr']}/{$parms['sno']}/{$ck}"); | trigger_error("allpa回傳:{$jdata}|{$in_time}/{$parms['lpr']}/{$parms['sno']}/{$ck}"); | ||||
| $results = json_decode($jdata, true); | $results = json_decode($jdata, true); | ||||
| trigger_error("+++".print_r($results, true)); | |||||
| if ($results['result_code'] == 0) // 歐pa卡, 點數足夠扣 | |||||
| if (isset($results['result_code'])) // 歐pa卡, 點數足夠扣 | |||||
| { | { | ||||
| // 臨停開門 | |||||
| $this->temp_opendoors($parms); | |||||
| // 歐pa卡, 字幕 | |||||
| $this->mq_send(MQ_TOPIC_ALTOB, MQ_ALTOB_MSG.",7,{$parms['ivsno']},{$parms['lpr']},{$results['amt']}".MQ_ALTOB_MSG_END_TAG); | |||||
| // // $this->mq_send(MQ_TOPIC_SUBTEXT, "{$parms['ivsno']},{$msg}扣{$results['amt']}點請離場"); | |||||
| // $this->mq_send(MQ_TOPIC_SUBTEXT, "{$parms['ivsno']},{$msg}請離場歐pa卡扣:{$results['amt']}點謝謝光臨"); | |||||
| // updated 2016/09/01 | |||||
| $data = array( | |||||
| 'out_before_time' => date('Y-m-d H:i:s', strtotime(" + 15 minutes")), | |||||
| 'pay_time' => $this->now_str, | |||||
| 'pay_type' => 9, // 歐pa卡 | |||||
| 'payed' => 1 | |||||
| ); | |||||
| $this->db->update('cario', $data, array('cario_no' => $rows_cario['cario_no'])); // 記錄出場 | |||||
| // [acer] cmd:102 離場車辨成功流程 START | |||||
| $this->call_acer('102', array('cario_no' => $rows_cario['cario_no'], 'ivs_no' => $parms['ivsno'], 'msg_code' => 7)); | |||||
| // [acer] cmd:102 離場車辨成功流程 END | |||||
| } | |||||
| else if ($results['result_code'] == 12) // 歐pa卡, 餘額不足 | |||||
| { | |||||
| // 臨停字幕 | |||||
| $this->mq_send(MQ_TOPIC_ALTOB, MQ_ALTOB_MSG.",12,{$parms['ivsno']},{$parms['lpr']}".MQ_ALTOB_MSG_END_TAG); | |||||
| // [acer] cmd:102 離場車辨成功流程 START | |||||
| $this->call_acer('102', array('cario_no' => $rows_cario['cario_no'], 'ivs_no' => $parms['ivsno'], 'msg_code' => 12)); | |||||
| // [acer] cmd:102 離場車辨成功流程 END | |||||
| } | |||||
| else if ($results['result_code'] == 11) // 歐pa卡, 查無會員 | |||||
| { | |||||
| // 臨停字幕 | |||||
| $this->mq_send(MQ_TOPIC_ALTOB, MQ_ALTOB_MSG.",9,{$parms['ivsno']},{$parms['lpr']}".MQ_ALTOB_MSG_END_TAG); | |||||
| //// $this->mq_send(MQ_TOPIC_SUBTEXT, "{$parms['ivsno']},{$msg}其它付款方式"); | |||||
| // $this->mq_send(MQ_TOPIC_SUBTEXT, "{$parms['ivsno']},{$msg}臨時車請投票卡或刷卡出場"); | |||||
| // [acer] cmd:102 離場車辨成功流程 START | |||||
| $this->call_acer('102', array('cario_no' => $rows_cario['cario_no'], 'ivs_no' => $parms['ivsno'], 'msg_code' => 9)); | |||||
| // [acer] cmd:102 離場車辨成功流程 END | |||||
| if($results['result_code'] == 0) | |||||
| { | |||||
| // 臨停開門 | |||||
| $this->temp_opendoors($parms); | |||||
| // 歐pa卡, 字幕 | |||||
| $this->mq_send(MQ_TOPIC_ALTOB, MQ_ALTOB_MSG.",7,{$parms['ivsno']},{$parms['lpr']},{$results['amt']}".MQ_ALTOB_MSG_END_TAG); | |||||
| // // $this->mq_send(MQ_TOPIC_SUBTEXT, "{$parms['ivsno']},{$msg}扣{$results['amt']}點請離場"); | |||||
| // $this->mq_send(MQ_TOPIC_SUBTEXT, "{$parms['ivsno']},{$msg}請離場歐pa卡扣:{$results['amt']}點謝謝光臨"); | |||||
| // updated 2016/09/01 | |||||
| $data = array( | |||||
| 'out_before_time' => date('Y-m-d H:i:s', strtotime(" + 15 minutes")), | |||||
| 'pay_time' => $this->now_str, | |||||
| 'pay_type' => 9, // 歐pa卡 | |||||
| 'payed' => 1 | |||||
| ); | |||||
| $this->db->update('cario', $data, array('cario_no' => $rows_cario['cario_no'])); // 記錄出場 | |||||
| // [acer] cmd:102 離場車辨成功流程 START | |||||
| $this->call_acer('102', array('cario_no' => $rows_cario['cario_no'], 'ivs_no' => $parms['ivsno'], 'msg_code' => 7)); | |||||
| // [acer] cmd:102 離場車辨成功流程 END | |||||
| } | |||||
| else if ($results['result_code'] == 12) // 歐pa卡, 餘額不足 | |||||
| { | |||||
| // 臨停字幕 | |||||
| $this->mq_send(MQ_TOPIC_ALTOB, MQ_ALTOB_MSG.",12,{$parms['ivsno']},{$parms['lpr']}".MQ_ALTOB_MSG_END_TAG); | |||||
| // [acer] cmd:102 離場車辨成功流程 START | |||||
| $this->call_acer('102', array('cario_no' => $rows_cario['cario_no'], 'ivs_no' => $parms['ivsno'], 'msg_code' => 12)); | |||||
| // [acer] cmd:102 離場車辨成功流程 END | |||||
| } | |||||
| else if ($results['result_code'] == 11) // 歐pa卡, 查無會員 | |||||
| { | |||||
| // 臨停字幕 | |||||
| $this->mq_send(MQ_TOPIC_ALTOB, MQ_ALTOB_MSG.",9,{$parms['ivsno']},{$parms['lpr']}".MQ_ALTOB_MSG_END_TAG); | |||||
| //// $this->mq_send(MQ_TOPIC_SUBTEXT, "{$parms['ivsno']},{$msg}其它付款方式"); | |||||
| // $this->mq_send(MQ_TOPIC_SUBTEXT, "{$parms['ivsno']},{$msg}臨時車請投票卡或刷卡出場"); | |||||
| // [acer] cmd:102 離場車辨成功流程 START | |||||
| $this->call_acer('102', array('cario_no' => $rows_cario['cario_no'], 'ivs_no' => $parms['ivsno'], 'msg_code' => 9)); | |||||
| // [acer] cmd:102 離場車辨成功流程 END | |||||
| } | |||||
| else | |||||
| { | |||||
| // 臨停字幕 | |||||
| $this->mq_send(MQ_TOPIC_ALTOB, MQ_ALTOB_MSG.",9,{$parms['ivsno']},{$parms['lpr']}".MQ_ALTOB_MSG_END_TAG); | |||||
| // [acer] cmd:102 離場車辨成功流程 START | |||||
| $this->call_acer('102', array('cario_no' => $rows_cario['cario_no'], 'ivs_no' => $parms['ivsno'], 'msg_code' => 9)); | |||||
| // [acer] cmd:102 離場車辨成功流程 END | |||||
| } | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| @@ -286,6 +286,37 @@ class Sync_data_model extends CI_Model | |||||
| // | // | ||||
| // ------------------------------------------------ | // ------------------------------------------------ | ||||
| // 同步歐pa卡 (功能: 歐pa卡同步) | |||||
| public function sync_allpa_user($info_arr=array('station_no_arr' => STATION_NO)) | |||||
| { | |||||
| require_once(ALTOB_SYNC_FILE); | |||||
| $sync_agent = new AltobSyncAgent(); | |||||
| $data = $sync_agent->query_allpa_users(); | |||||
| $data_allpa_user_arr = json_decode($data, true); | |||||
| if (sizeof($data_allpa_user_arr) <= 0) | |||||
| { | |||||
| trigger_error(SYNC_DATA_LOG_TITLE . '.. allpa_user empty ..'); // 忽略完全沒會員的情況 | |||||
| return 'empty'; | |||||
| } | |||||
| $this->db->trans_start(); | |||||
| // 清空 | |||||
| $this->db->empty_table('allpa_user'); | |||||
| // 建立 members | |||||
| $this->db->insert_batch('allpa_user', $data_allpa_user_arr); | |||||
| $this->db->trans_complete(); | |||||
| if ($this->db->trans_status() === FALSE) | |||||
| { | |||||
| trigger_error(SYNC_DATA_LOG_TITLE . '.. sync allpa_user fail ..'. '| last_query: ' . $this->db->last_query()); | |||||
| return 'fail'; | |||||
| } | |||||
| trigger_error(SYNC_DATA_LOG_TITLE . '.. sync allpa_user completed ..'); | |||||
| return 'ok'; | |||||
| } | |||||
| // 同步場站會員 (功能: 會員同步) | // 同步場站會員 (功能: 會員同步) | ||||
| public function sync_members($info_arr=array('station_no_arr' => STATION_NO)) | public function sync_members($info_arr=array('station_no_arr' => STATION_NO)) | ||||
| { | { | ||||
| @@ -580,6 +611,7 @@ class Sync_data_model extends CI_Model | |||||
| $sync_agent->init(STATION_NO); // 已帶上的資料場站編號為主 | $sync_agent->init(STATION_NO); // 已帶上的資料場站編號為主 | ||||
| $sync_result = $sync_agent->upd_pks_groups(json_encode($pks_group_query_data, JSON_UNESCAPED_UNICODE)); | $sync_result = $sync_agent->upd_pks_groups(json_encode($pks_group_query_data, JSON_UNESCAPED_UNICODE)); | ||||
| trigger_error( SYNC_DATA_LOG_TITLE . '..'. __FUNCTION__ . "..upd_pks_groups.." . $sync_result); | trigger_error( SYNC_DATA_LOG_TITLE . '..'. __FUNCTION__ . "..upd_pks_groups.." . $sync_result); | ||||
| return $sync_result; | |||||
| } | } | ||||
| // 重新載入場站設定 | // 重新載入場站設定 | ||||
| @@ -12,6 +12,7 @@ class AltobSyncAgent | |||||
| const SYNC_CARS_URL = 'http://61.219.172.12/parkings/cars.html/'; // 進出記錄 | const SYNC_CARS_URL = 'http://61.219.172.12/parkings/cars.html/'; // 進出記錄 | ||||
| const SYNC_ST_URL = 'http://61.219.172.11:60123/admins_station.html/'; // 場站記錄 | const SYNC_ST_URL = 'http://61.219.172.11:60123/admins_station.html/'; // 場站記錄 | ||||
| const API_URL = 'http://parks.altob.com.tw:60123/parkingquery.html/'; // 場站 API | const API_URL = 'http://parks.altob.com.tw:60123/parkingquery.html/'; // 場站 API | ||||
| const ALLPA_URL = 'http://61.219.172.11:60123/allpa_service.html/'; // 歐pa卡 | |||||
| public $io = ''; | public $io = ''; | ||||
| public $etag = ''; | public $etag = ''; | ||||
| @@ -188,7 +189,7 @@ class AltobSyncAgent | |||||
| // 初始化網路服務物件。 | // 初始化網路服務物件。 | ||||
| $oService = new AltobSyncService(); | $oService = new AltobSyncService(); | ||||
| $oService->ServiceURL = AltobSyncAgent::API_URL; | $oService->ServiceURL = AltobSyncAgent::API_URL; | ||||
| $oService->ServiceCMD = "sync_security_action/{$lpr}/{$pswd}/{$action}/{$ck}/{$station_no}"; | |||||
| $oService->ServiceCMD = __FUNCTION__ . "/{$lpr}/{$pswd}/{$action}/{$ck}/{$station_no}"; | |||||
| // 傳遞參數至遠端。 | // 傳遞參數至遠端。 | ||||
| return $oService->ServerPost($this->post_parms); | return $oService->ServerPost($this->post_parms); | ||||
| @@ -206,7 +207,7 @@ class AltobSyncAgent | |||||
| // 初始化網路服務物件。 | // 初始化網路服務物件。 | ||||
| $oService = new AltobSyncService(); | $oService = new AltobSyncService(); | ||||
| $oService->ServiceURL = AltobSyncAgent::API_URL; | $oService->ServiceURL = AltobSyncAgent::API_URL; | ||||
| $oService->ServiceCMD = "sync_change_pwd/{$lpr}/{$pswd}/{$new_pwd}/{$ck}/{$station_no}"; | |||||
| $oService->ServiceCMD = __FUNCTION__ . "/{$lpr}/{$pswd}/{$new_pwd}/{$ck}/{$station_no}"; | |||||
| // 傳遞參數至遠端。 | // 傳遞參數至遠端。 | ||||
| return $oService->ServerPost($this->post_parms); | return $oService->ServerPost($this->post_parms); | ||||
| @@ -227,7 +228,55 @@ class AltobSyncAgent | |||||
| // 初始化網路服務物件。 | // 初始化網路服務物件。 | ||||
| $oService = new AltobSyncService(); | $oService = new AltobSyncService(); | ||||
| $oService->ServiceURL = AltobSyncAgent::SYNC_PKS_URL; | $oService->ServiceURL = AltobSyncAgent::SYNC_PKS_URL; | ||||
| $oService->ServiceCMD = 'upd_pks_groups'; | |||||
| $oService->ServiceCMD = __FUNCTION__; | |||||
| // 傳遞參數至遠端。 | |||||
| return $oService->ServerPost($this->post_parms); | |||||
| } | |||||
| // =============================================== | |||||
| // 歐Pa卡 | |||||
| // =============================================== | |||||
| // 歐Pa卡 - 開門 | |||||
| public function allpa_go($lpr) | |||||
| { | |||||
| $error_parms_msg = $this->check_init_parms(); | |||||
| if(!empty($error_parms_msg)) { return $error_parms_msg; } | |||||
| if(empty($this->in_time)) | |||||
| return 'in_time not found'; // 需設定 | |||||
| if(empty($lpr)) | |||||
| return 'lpr not found'; // 需設定 | |||||
| $this->post_parms['in_time'] = $this->in_time; | |||||
| $this->post_parms['lpr'] = $lpr; | |||||
| $this->post_parms['ck'] = md5( | |||||
| $this->post_parms['lpr']. 'a' . date('dmh') . 'lt' . | |||||
| $this->post_parms['in_time'] . 'o' . // timestamp | |||||
| $this->post_parms['station_no'] . 'b' . __FUNCTION__ . | |||||
| $this->post_parms['io_time'] // timestamp | |||||
| ); | |||||
| // 初始化網路服務物件。 | |||||
| $oService = new AltobSyncService(); | |||||
| $oService->ServiceURL = AltobSyncAgent::ALLPA_URL; | |||||
| $oService->ServiceCMD = __FUNCTION__; | |||||
| // 傳遞參數至遠端。 | |||||
| return $oService->ServerPost($this->post_parms); | |||||
| } | |||||
| // 歐Pa卡 - 取得場站會員 | |||||
| public function query_allpa_users() | |||||
| { | |||||
| $this->post_parms['ck'] = md5('a' . date('dmh') . 'lt' . __FUNCTION__ . 'ob'); | |||||
| // 初始化網路服務物件。 | |||||
| $oService = new AltobSyncService(); | |||||
| $oService->ServiceURL = AltobSyncAgent::ALLPA_URL; | |||||
| $oService->ServiceCMD = __FUNCTION__; | |||||
| // 傳遞參數至遠端。 | // 傳遞參數至遠端。 | ||||
| return $oService->ServerPost($this->post_parms); | return $oService->ServerPost($this->post_parms); | ||||