| @@ -522,6 +522,44 @@ class Allpa_service extends CI_Controller | |||
| 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卡 - 非同步扣款 (限制存取) | |||
| public function allpa_consume_handler() | |||
| @@ -555,13 +593,15 @@ class Allpa_service extends CI_Controller | |||
| // only test | |||
| 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 "<br/>"; | |||
| echo "\n"; | |||
| 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('Content-Length: ' . ob_get_length()); | |||
| @@ -365,6 +365,12 @@ class Carpark extends CI_Controller | |||
| 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); | |||
| 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); | |||
| } | |||
| } | |||
| // [API] 取得最新未結清 | |||
| @@ -560,50 +560,62 @@ class Cars_model extends CI_Model | |||
| { | |||
| $in_time = strtotime($rows_cario['out_before_time']); | |||
| $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}"); | |||
| $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 | |||
| { | |||
| @@ -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)) | |||
| { | |||
| @@ -580,6 +611,7 @@ class Sync_data_model extends CI_Model | |||
| $sync_agent->init(STATION_NO); // 已帶上的資料場站編號為主 | |||
| $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); | |||
| return $sync_result; | |||
| } | |||
| // 重新載入場站設定 | |||
| @@ -12,6 +12,7 @@ class AltobSyncAgent | |||
| 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 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 $etag = ''; | |||
| @@ -188,7 +189,7 @@ class AltobSyncAgent | |||
| // 初始化網路服務物件。 | |||
| $oService = new AltobSyncService(); | |||
| $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); | |||
| @@ -206,7 +207,7 @@ class AltobSyncAgent | |||
| // 初始化網路服務物件。 | |||
| $oService = new AltobSyncService(); | |||
| $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); | |||
| @@ -227,7 +228,55 @@ class AltobSyncAgent | |||
| // 初始化網路服務物件。 | |||
| $oService = new AltobSyncService(); | |||
| $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); | |||