VM暫存
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

377 行
11KB

  1. <?php
  2. /**
  3. * Altob 資料同步
  4. *
  5. * @version 1.0
  6. * @author mip
  7. */
  8. class AltobSyncAgent
  9. {
  10. const SYNC_PKS_URL = 'http://61.219.172.12/parkings/cars.html/'; // 在席記錄
  11. const SYNC_CARS_URL = 'http://61.219.172.12/parkings/cars.html/'; // 進出記錄
  12. const SYNC_ST_URL = 'http://61.219.172.11:60123/admins_station.html/'; // 場站記錄
  13. const API_URL = 'http://parks.altob.com.tw:60123/parkingquery.html/'; // 場站 API
  14. const ALLPA_URL = 'http://61.219.172.11:60123/allpa_service.html/'; // 歐pa卡
  15. public $io = '';
  16. public $etag = '';
  17. public $pic_name = '';
  18. public $ivsno = 0;
  19. public $member_no = 0;
  20. public $finished = 0;
  21. public $in_time = '';
  22. public $cario_no = 0;
  23. private $post_parms;
  24. /**
  25. * 初始化
  26. */
  27. public function init($station_no, $time='')
  28. {
  29. $this->post_parms = array();
  30. $this->post_parms['station_no'] = $station_no;
  31. $this->post_parms['io_time'] = $time;
  32. }
  33. // 檢查基本欄位
  34. function check_init_parms()
  35. {
  36. if(empty($this->post_parms['station_no']))
  37. return 'station_no not set'; // 場站編號
  38. if(empty($this->post_parms['io_time']))
  39. return 'io_time not set'; // 進出時間 (若為繳費帶進場時間)
  40. return false;
  41. }
  42. // ===============================================
  43. // st_io
  44. // ===============================================
  45. // 傳送進場記錄
  46. public function sync_st_in($parms)
  47. {
  48. $error_parms_msg = $this->check_init_parms();
  49. if(!empty($error_parms_msg)) { return $error_parms_msg; }
  50. if(empty($this->cario_no))
  51. return 'cario_no not found';
  52. if(empty($parms['lpr']))
  53. return 'lpr not found';
  54. if(empty($parms['io']))
  55. return 'io not found';
  56. $this->post_parms['cario_no'] = $this->cario_no; // 需設定
  57. $this->post_parms['member_no'] = $this->member_no; // 預設為 0
  58. $this->post_parms['lpr'] = $parms['lpr'];
  59. $this->post_parms['io'] = $parms['io'];
  60. $this->post_parms['etag'] = $parms['etag'] == 'NONE' ? '' : $parms['etag'];
  61. $this->post_parms['pic_name'] = empty($parms['pic_name']) ? '' : $parms['pic_name'];
  62. $this->post_parms['ivsno'] = $parms['ivsno'];
  63. $this->post_parms['out_before_time'] = $this->post_parms['io_time'];
  64. // 初始化網路服務物件。
  65. $oService = new AltobSyncService();
  66. $oService->ServiceURL = AltobSyncAgent::SYNC_CARS_URL;
  67. $oService->ServiceCMD = 'st_in';
  68. // 傳遞參數至遠端。
  69. return $oService->ServerPost($this->post_parms);
  70. }
  71. // 傳送離場記錄
  72. public function sync_st_out($parms)
  73. {
  74. $error_parms_msg = $this->check_init_parms();
  75. if(!empty($error_parms_msg)) { return $error_parms_msg; }
  76. // 有入場記錄時
  77. if($this->cario_no > 0)
  78. {
  79. $this->post_parms['cario_no'] = $this->cario_no;
  80. if(empty($this->in_time))
  81. return 'in_time not found'; // 需設定
  82. $this->post_parms['in_time'] = $this->in_time;
  83. $this->post_parms['minutes'] = floor((strtotime($this->post_parms['io_time']) - strtotime($this->in_time)) / 60); // 停車時數 (分鐘)
  84. }
  85. if(empty($parms['lpr']))
  86. return 'lpr not found';
  87. if(empty($parms['io']))
  88. return 'io not found';
  89. $this->post_parms['member_no'] = $this->member_no; // 預設為 0
  90. $this->post_parms['finished'] = $this->finished; // 預設為 0
  91. $this->post_parms['lpr'] = $parms['lpr'];
  92. $this->post_parms['io'] = $parms['io'];
  93. $this->post_parms['etag'] = $parms['etag'] == 'NONE' ? '' : $parms['etag'];
  94. $this->post_parms['pic_name'] = empty($parms['pic_name']) ? '' : $parms['pic_name'];
  95. $this->post_parms['ivsno'] = $parms['ivsno'];
  96. // 初始化網路服務物件。
  97. $oService = new AltobSyncService();
  98. $oService->ServiceURL = AltobSyncAgent::SYNC_CARS_URL;
  99. $oService->ServiceCMD = 'st_out';
  100. // 傳遞參數至遠端。
  101. return $oService->ServerPost($this->post_parms);
  102. }
  103. // 傳送付費更新記錄
  104. public function sync_st_pay($lpr, $pay_time, $pay_type=0, $out_before_time='')
  105. {
  106. $error_parms_msg = $this->check_init_parms();
  107. if(!empty($error_parms_msg)) { return $error_parms_msg; }
  108. if(empty($this->cario_no))
  109. return 'cario_no not found';
  110. if(empty($lpr))
  111. return 'lpr not found';
  112. if(empty($pay_time))
  113. return 'pay_time not found';
  114. $this->post_parms['cario_no'] = $this->cario_no; // 需設定
  115. $this->post_parms['lpr'] = $lpr;
  116. $this->post_parms['pay_time'] = $pay_time;
  117. $this->post_parms['pay_type'] = $pay_type;
  118. $this->post_parms['out_before_time'] = empty($out_before_time) ? date('Y-m-d H:i:s', strtotime("{$pay_time} + 15 minutes")) : $out_before_time;
  119. // 初始化網路服務物件。
  120. $oService = new AltobSyncService();
  121. $oService->ServiceURL = AltobSyncAgent::SYNC_CARS_URL;
  122. $oService->ServiceCMD = 'st_pay';
  123. // 傳遞參數至遠端。
  124. return $oService->ServerPost($this->post_parms);
  125. }
  126. // 傳送進出更新記錄
  127. public function sync_st_io_meta($meta)
  128. {
  129. $error_parms_msg = $this->check_init_parms();
  130. if(!empty($error_parms_msg)) { return $error_parms_msg; }
  131. if(empty($meta))
  132. return 'meta not found';
  133. if(empty($this->cario_no))
  134. return 'cario_no not found';
  135. $this->post_parms['meta'] = $meta; // 需設定
  136. $this->post_parms['cario_no'] = $this->cario_no; // 需設定
  137. // 初始化網路服務物件。
  138. $oService = new AltobSyncService();
  139. $oService->ServiceURL = AltobSyncAgent::SYNC_CARS_URL;
  140. $oService->ServiceCMD = 'st_io_meta';
  141. // 傳遞參數至遠端。
  142. return $oService->ServerPost($this->post_parms);
  143. }
  144. // ===============================================
  145. // SOS
  146. // ===============================================
  147. // 傳送 SOS
  148. public function sync_st_sos($machine_no)
  149. {
  150. $error_parms_msg = $this->check_init_parms();
  151. if(!empty($error_parms_msg)) { return $error_parms_msg; }
  152. if(empty($machine_no))
  153. return 'machine_no not found';
  154. $this->post_parms['machine_no'] = $machine_no;
  155. // 初始化網路服務物件。
  156. $oService = new AltobSyncService();
  157. $oService->ServiceURL = AltobSyncAgent::SYNC_CARS_URL;
  158. $oService->ServiceCMD = 'st_sos';
  159. // 傳遞參數至遠端。
  160. return $oService->ServerPost($this->post_parms);
  161. }
  162. // ===============================================
  163. // members
  164. // ===============================================
  165. // 取得場站會員
  166. public function get_st_members()
  167. {
  168. if(empty($this->post_parms['station_no']))
  169. return 'station_no not set'; // 場站編號
  170. // 初始化網路服務物件。
  171. $oService = new AltobSyncService();
  172. $oService->ServiceURL = AltobSyncAgent::SYNC_ST_URL;
  173. $oService->ServiceCMD = 'member_query_all';
  174. // 傳遞參數至遠端。
  175. return $oService->ServerPost($this->post_parms);
  176. }
  177. // 同步會員鎖車 (0: 解鎖, 1: 上鎖, 2: 查詢)
  178. public function sync_security_action($lpr, $pswd, $action)
  179. {
  180. if(empty($this->post_parms['station_no']))
  181. return 'station_no not set'; // 場站編號
  182. $station_no = $this->post_parms['station_no'];
  183. $ck = md5($lpr.'i'.$pswd.'iii'.$action);
  184. // 初始化網路服務物件。
  185. $oService = new AltobSyncService();
  186. $oService->ServiceURL = AltobSyncAgent::API_URL;
  187. $oService->ServiceCMD = __FUNCTION__ . "/{$lpr}/{$pswd}/{$action}/{$ck}/{$station_no}";
  188. // 傳遞參數至遠端。
  189. return $oService->ServerPost($this->post_parms);
  190. }
  191. // 同步會員改密碼
  192. public function sync_change_pwd($lpr, $pswd, $new_pwd)
  193. {
  194. if(empty($this->post_parms['station_no']))
  195. return 'station_no not set'; // 場站編號
  196. $station_no = $this->post_parms['station_no'];
  197. $ck = md5($lpr.'i'.$pswd.'iii'.$new_pwd);
  198. // 初始化網路服務物件。
  199. $oService = new AltobSyncService();
  200. $oService->ServiceURL = AltobSyncAgent::API_URL;
  201. $oService->ServiceCMD = __FUNCTION__ . "/{$lpr}/{$pswd}/{$new_pwd}/{$ck}/{$station_no}";
  202. // 傳遞參數至遠端。
  203. return $oService->ServerPost($this->post_parms);
  204. }
  205. // ===============================================
  206. // pks
  207. // ===============================================
  208. // 在席
  209. public function upd_pks_groups($data)
  210. {
  211. if(empty($this->post_parms['station_no']))
  212. return 'station_no not set'; // 場站編號
  213. $this->post_parms['data'] = $data;
  214. // 初始化網路服務物件。
  215. $oService = new AltobSyncService();
  216. $oService->ServiceURL = AltobSyncAgent::SYNC_PKS_URL;
  217. $oService->ServiceCMD = __FUNCTION__;
  218. // 傳遞參數至遠端。
  219. return $oService->ServerPost($this->post_parms);
  220. }
  221. // ===============================================
  222. // 歐Pa卡
  223. // ===============================================
  224. // 歐Pa卡 - 開門
  225. public function allpa_go($lpr)
  226. {
  227. $error_parms_msg = $this->check_init_parms();
  228. if(!empty($error_parms_msg)) { return $error_parms_msg; }
  229. if(empty($this->in_time))
  230. return 'in_time not found'; // 需設定
  231. if(empty($lpr))
  232. return 'lpr not found'; // 需設定
  233. $this->post_parms['in_time'] = $this->in_time;
  234. $this->post_parms['lpr'] = $lpr;
  235. $this->post_parms['ck'] = md5(
  236. $this->post_parms['lpr']. 'a' . date('dmh') . 'lt' .
  237. $this->post_parms['in_time'] . 'o' . // timestamp
  238. $this->post_parms['station_no'] . 'b' . __FUNCTION__ .
  239. $this->post_parms['io_time'] // timestamp
  240. );
  241. // 初始化網路服務物件。
  242. $oService = new AltobSyncService();
  243. $oService->ServiceURL = AltobSyncAgent::ALLPA_URL;
  244. $oService->ServiceCMD = __FUNCTION__;
  245. // 傳遞參數至遠端。
  246. return $oService->ServerPost($this->post_parms);
  247. }
  248. // 歐Pa卡 - 取得場站會員
  249. public function query_allpa_users()
  250. {
  251. $this->post_parms['ck'] = md5('a' . date('dmh') . 'lt' . __FUNCTION__ . 'ob');
  252. // 初始化網路服務物件。
  253. $oService = new AltobSyncService();
  254. $oService->ServiceURL = AltobSyncAgent::ALLPA_URL;
  255. $oService->ServiceCMD = __FUNCTION__;
  256. // 傳遞參數至遠端。
  257. return $oService->ServerPost($this->post_parms);
  258. }
  259. }
  260. /**
  261. * 呼叫網路服務的類別。
  262. */
  263. class AltobSyncService {
  264. /**
  265. * 網路服務類別呼叫的位址。
  266. */
  267. public $ServiceURL = 'ServiceURL';
  268. public $ServiceCMD = 'ServiceCMD';
  269. /**
  270. * 網路服務類別的建構式。
  271. */
  272. function __construct() {$this->AltobSyncService();}
  273. /**
  274. * 網路服務類別的實體。
  275. */
  276. function AltobSyncService() {}
  277. /**
  278. * 提供伺服器端呼叫遠端伺服器 Web API 的方法。
  279. */
  280. function ServerPost($parameters) {
  281. $ch = curl_init();
  282. curl_setopt($ch, CURLOPT_URL, $this->ServiceURL . $this->ServiceCMD);
  283. curl_setopt($ch, CURLOPT_HEADER, FALSE);
  284. curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
  285. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  286. curl_setopt($ch, CURLOPT_POST, TRUE);
  287. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT ,5);
  288. curl_setopt($ch, CURLOPT_TIMEOUT, 5); //timeout in seconds
  289. curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($parameters));
  290. $rs = curl_exec($ch);
  291. curl_close($ch);
  292. return $rs;
  293. }
  294. }