load->database(); $this->now_str = date('Y-m-d H:i:s'); // MITAC 連線設定 (測試環境) //define('MITAC_SERVICE_IP', '220.130.199.142'); //define('MITAC_SERVICE_PORT', 49990); // MITAC 連線設定 (正式環境 - 現場呼叫) define('MITAC_SERVICE_IP', '192.168.10.60'); define('MITAC_SERVICE_PORT', 49990); } // mitac socket function mitac_socket($in, $function_name = __FUNCTION__) { $in_encode = mb_convert_encoding($in, 'UTF-16LE', 'UTF-8'); trigger_error($function_name . "..|{$in}|". json_encode($in_encode, true)); $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if ($socket === false) { trigger_error($function_name . "..socket_create() failed: reason: " . socket_strerror(socket_last_error())); } $result = socket_connect($socket, MITAC_SERVICE_IP, MITAC_SERVICE_PORT); if ($result === false) { trigger_error($function_name . "..socket_connect() failed.\nReason: ({$result}) " . socket_strerror(socket_last_error($socket))); return false; // 中斷 } if(!socket_write($socket, $in_encode, strlen($in_encode))) { trigger_error($function_name . '..Write failed..'); } $out = socket_read($socket, 64); socket_shutdown($socket); socket_close($socket); trigger_error($function_name . "..socket output|{$out}"); return $out; } public function init($vars) { $this->vars = $vars; } // 詢問是否存活 public function echo_mitac_alive() { $msg = implode(',', ['Mitac', 'Are you alive']); $result = $this->mitac_socket($msg, __FUNCTION__); return 'ok'; } // 要求扣款 (ALTOB to MITAC) public function parking_fee_altob($parms) { // 轉換成對方要的格式 $seqno = date('Ymd') . '_' . str_pad($parms['seqno'], 10, '0', STR_PAD_LEFT); $lpr = $parms['lpr']; $in_time = date('Ymd_His', strtotime($parms['in_time'])); $out_time = date('Ymd_His', strtotime($parms['out_time'])); $gate_id = $parms['gate_id']; // 產生通訊內容 $msg = implode(',', ['Mitac', 'ParkingFee_Altob', $seqno, $lpr, $in_time, $out_time, $gate_id]); //iconv("UTF-8", "ISO-8859-1", implode(',', ['Mitac', 'ParkingFee_Altob', $seqno, $lpr, $in_time, $out_time, $gate_id])); $result = $this->mitac_socket($msg, __FUNCTION__); return 'ok'; } // 回應扣款成功 (MITAC to ALTOB) public function deduct_result($parms) { $seqno_arr = explode('_', $parms['seqno']); $in_time_arr = explode('_', $parms['in_time']); $out_time_arr = explode('_', $parms['out_time']); // 解出我方要的資訊 $cario_no = intval(preg_replace( '/[^0-9]/', '', $seqno_arr[1])); $lpr = $parms['lpr']; $amt = intval(preg_replace( '/[^0-9]/', '', $parms['amt'])); $amt_discount = intval(preg_replace( '/[^0-9]/', '', $parms['amt_discount'])); $amt_real = intval(preg_replace( '/[^0-9]/', '', $parms['amt_real'])); $in_time = substr($in_time_arr[0], 0, 4). '-' . substr($in_time_arr[0], 4, 2) . '-' . substr($in_time_arr[0], 6, 2) . ' ' . substr($in_time_arr[1], 0, 2). ':' . substr($in_time_arr[1], 2, 2) . ':' . substr($in_time_arr[1], 4, 2); $pay_time = $this->now_str; // 通訊內容 $parms = array( 'cario_no' => $cario_no, 'lpr' => $lpr, 'amt' => $amt, 'amt_discount' => $amt_discount, 'amt_real' => $amt_real, 'in_time' => $in_time, 'pay_time' => $pay_time); $function_name = 'mitac2payed'; trigger_error(__FUNCTION__ . "..call {$function_name}.." . print_r($parms, true)); // 驗証碼 $parms['ck'] = md5($parms['cario_no']. 'a' . date('dmh') . 'l' . $parms['lpr'] . 't'. $parms['amt']. 'o'. $parms['amt_discount'] . 'b'. $parms['amt_real'] . $function_name); // 呼叫 try{ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://localhost/carpayment.html/{$function_name}"); curl_setopt($ch, CURLOPT_HEADER, FALSE); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_POST, TRUE); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT ,3); curl_setopt($ch, CURLOPT_TIMEOUT, 3); //timeout in seconds curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($parms)); $data = curl_exec($ch); if(curl_errno($ch)) { trigger_error(__FUNCTION__ . ', curl error: '. curl_error($ch)); } curl_close($ch); trigger_error(__FUNCTION__ . '..'. $data); }catch (Exception $e){ trigger_error(__FUNCTION__ . 'error:'.$e->getMessage()); } return 'ok'; } }