VM暫存
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

280 line
8.2KB

  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. public $io = '';
  15. public $etag = '';
  16. public $pic_name = '';
  17. public $ivsno = 0;
  18. public $member_no = 0;
  19. public $finished = 0;
  20. public $in_time = '';
  21. public $cario_no = 0;
  22. private $post_parms;
  23. /**
  24. * 初始化
  25. */
  26. public function init($station_no, $time='')
  27. {
  28. $this->post_parms = array();
  29. $this->post_parms['station_no'] = $station_no;
  30. $this->post_parms['io_time'] = $time;
  31. }
  32. // 檢查基本欄位
  33. function check_init_parms()
  34. {
  35. if(empty($this->post_parms['station_no']))
  36. return 'station_no not set'; // 場站編號
  37. if(empty($this->post_parms['io_time']))
  38. return 'io_time not set'; // 進出時間 (若為繳費帶進場時間)
  39. return false;
  40. }
  41. // ===============================================
  42. // st_io
  43. // ===============================================
  44. // 傳送進場記錄
  45. public function sync_st_in($parms)
  46. {
  47. $error_parms_msg = $this->check_init_parms();
  48. if(!empty($error_parms_msg)) { return $error_parms_msg; }
  49. if(empty($this->cario_no))
  50. return 'cario_no not found';
  51. if(empty($parms['lpr']))
  52. return 'lpr not found';
  53. if(empty($parms['io']))
  54. return 'io not found';
  55. $this->post_parms['cario_no'] = $this->cario_no; // 需設定
  56. $this->post_parms['member_no'] = $this->member_no; // 預設為 0
  57. $this->post_parms['lpr'] = $parms['lpr'];
  58. $this->post_parms['io'] = $parms['io'];
  59. $this->post_parms['etag'] = $parms['etag'] == 'NONE' ? '' : $parms['etag'];
  60. $this->post_parms['pic_name'] = empty($parms['pic_name']) ? '' : $parms['pic_name'];
  61. $this->post_parms['ivsno'] = $parms['ivsno'];
  62. $this->post_parms['out_before_time'] = $this->post_parms['io_time'];
  63. // 初始化網路服務物件。
  64. $oService = new AltobSyncService();
  65. $oService->ServiceURL = AltobSyncAgent::SYNC_CARS_URL;
  66. $oService->ServiceCMD = 'st_in';
  67. // 傳遞參數至遠端。
  68. return $oService->ServerPost($this->post_parms);
  69. }
  70. // 傳送離場記錄
  71. public function sync_st_out($parms)
  72. {
  73. $error_parms_msg = $this->check_init_parms();
  74. if(!empty($error_parms_msg)) { return $error_parms_msg; }
  75. // 有入場記錄時
  76. if($this->cario_no > 0)
  77. {
  78. $this->post_parms['cario_no'] = $this->cario_no;
  79. if(empty($this->in_time))
  80. return 'in_time not found'; // 需設定
  81. $this->post_parms['in_time'] = $this->in_time;
  82. $this->post_parms['minutes'] = floor((strtotime($this->post_parms['io_time']) - strtotime($this->in_time)) / 60); // 停車時數 (分鐘)
  83. }
  84. if(empty($parms['lpr']))
  85. return 'lpr not found';
  86. if(empty($parms['io']))
  87. return 'io not found';
  88. $this->post_parms['member_no'] = $this->member_no; // 預設為 0
  89. $this->post_parms['finished'] = $this->finished; // 預設為 0
  90. $this->post_parms['lpr'] = $parms['lpr'];
  91. $this->post_parms['io'] = $parms['io'];
  92. $this->post_parms['etag'] = $parms['etag'] == 'NONE' ? '' : $parms['etag'];
  93. $this->post_parms['pic_name'] = empty($parms['pic_name']) ? '' : $parms['pic_name'];
  94. $this->post_parms['ivsno'] = $parms['ivsno'];
  95. // 初始化網路服務物件。
  96. $oService = new AltobSyncService();
  97. $oService->ServiceURL = AltobSyncAgent::SYNC_CARS_URL;
  98. $oService->ServiceCMD = 'st_out';
  99. // 傳遞參數至遠端。
  100. return $oService->ServerPost($this->post_parms);
  101. }
  102. // 傳送付費更新記錄
  103. public function sync_st_pay($lpr, $pay_time, $pay_type=0, $out_before_time='')
  104. {
  105. $error_parms_msg = $this->check_init_parms();
  106. if(!empty($error_parms_msg)) { return $error_parms_msg; }
  107. if(empty($this->cario_no))
  108. return 'cario_no not found';
  109. if(empty($lpr))
  110. return 'lpr not found';
  111. if(empty($pay_time))
  112. return 'pay_time not found';
  113. $this->post_parms['cario_no'] = $this->cario_no; // 需設定
  114. $this->post_parms['lpr'] = $lpr;
  115. $this->post_parms['pay_time'] = $pay_time;
  116. $this->post_parms['pay_type'] = $pay_type;
  117. $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;
  118. // 初始化網路服務物件。
  119. $oService = new AltobSyncService();
  120. $oService->ServiceURL = AltobSyncAgent::SYNC_CARS_URL;
  121. $oService->ServiceCMD = 'st_pay';
  122. // 傳遞參數至遠端。
  123. return $oService->ServerPost($this->post_parms);
  124. }
  125. // ===============================================
  126. // members
  127. // ===============================================
  128. // 取得場站會員
  129. public function get_st_members()
  130. {
  131. if(empty($this->post_parms['station_no']))
  132. return 'station_no not set'; // 場站編號
  133. // 初始化網路服務物件。
  134. $oService = new AltobSyncService();
  135. $oService->ServiceURL = AltobSyncAgent::SYNC_ST_URL;
  136. $oService->ServiceCMD = 'member_query_all';
  137. // 傳遞參數至遠端。
  138. return $oService->ServerPost($this->post_parms);
  139. }
  140. // 同步會員鎖車 (0: 解鎖, 1: 上鎖, 2: 查詢)
  141. public function sync_security_action($lpr, $pswd, $action)
  142. {
  143. if(empty($this->post_parms['station_no']))
  144. return 'station_no not set'; // 場站編號
  145. $station_no = $this->post_parms['station_no'];
  146. $ck = md5($lpr.'i'.$pswd.'iii'.$action);
  147. // 初始化網路服務物件。
  148. $oService = new AltobSyncService();
  149. $oService->ServiceURL = AltobSyncAgent::API_URL;
  150. $oService->ServiceCMD = "sync_security_action/{$lpr}/{$pswd}/{$action}/{$ck}/{$station_no}";
  151. // 傳遞參數至遠端。
  152. return $oService->ServerPost($this->post_parms);
  153. }
  154. // 同步會員改密碼
  155. public function sync_change_pwd($lpr, $pswd, $new_pwd)
  156. {
  157. if(empty($this->post_parms['station_no']))
  158. return 'station_no not set'; // 場站編號
  159. $station_no = $this->post_parms['station_no'];
  160. $ck = md5($lpr.'i'.$pswd.'iii'.$new_pwd);
  161. // 初始化網路服務物件。
  162. $oService = new AltobSyncService();
  163. $oService->ServiceURL = AltobSyncAgent::API_URL;
  164. $oService->ServiceCMD = "sync_change_pwd/{$lpr}/{$pswd}/{$new_pwd}/{$ck}/{$station_no}";
  165. // 傳遞參數至遠端。
  166. return $oService->ServerPost($this->post_parms);
  167. }
  168. // ===============================================
  169. // pks
  170. // ===============================================
  171. // 在席
  172. public function upd_pks_groups($data)
  173. {
  174. if(empty($this->post_parms['station_no']))
  175. return 'station_no not set'; // 場站編號
  176. $this->post_parms['data'] = $data;
  177. // 初始化網路服務物件。
  178. $oService = new AltobSyncService();
  179. $oService->ServiceURL = AltobSyncAgent::SYNC_PKS_URL;
  180. $oService->ServiceCMD = 'upd_pks_groups';
  181. // 傳遞參數至遠端。
  182. return $oService->ServerPost($this->post_parms);
  183. }
  184. }
  185. /**
  186. * 呼叫網路服務的類別。
  187. */
  188. class AltobSyncService {
  189. /**
  190. * 網路服務類別呼叫的位址。
  191. */
  192. public $ServiceURL = 'ServiceURL';
  193. public $ServiceCMD = 'ServiceCMD';
  194. /**
  195. * 網路服務類別的建構式。
  196. */
  197. function __construct() {$this->AltobSyncService();}
  198. /**
  199. * 網路服務類別的實體。
  200. */
  201. function AltobSyncService() {}
  202. /**
  203. * 提供伺服器端呼叫遠端伺服器 Web API 的方法。
  204. */
  205. function ServerPost($parameters) {
  206. $ch = curl_init();
  207. curl_setopt($ch, CURLOPT_URL, $this->ServiceURL . $this->ServiceCMD);
  208. curl_setopt($ch, CURLOPT_HEADER, FALSE);
  209. curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
  210. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  211. curl_setopt($ch, CURLOPT_POST, TRUE);
  212. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT ,5);
  213. curl_setopt($ch, CURLOPT_TIMEOUT, 5); //timeout in seconds
  214. curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($parameters));
  215. $rs = curl_exec($ch);
  216. curl_close($ch);
  217. return $rs;
  218. }
  219. }