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.

149 lines
4.8KB

  1. <?php
  2. /*
  3. file: mitac_servicemodel.php
  4. */
  5. class Mitac_service_model extends CI_Model
  6. {
  7. var $vars = array();
  8. var $now_str;
  9. function __construct()
  10. {
  11. parent::__construct();
  12. $this->load->database();
  13. $this->now_str = date('Y-m-d H:i:s');
  14. // MITAC 連線設定 (測試環境)
  15. //define('MITAC_SERVICE_IP', '220.130.199.142');
  16. //define('MITAC_SERVICE_PORT', 49990);
  17. // MITAC 連線設定 (正式環境 - 現場呼叫)
  18. define('MITAC_SERVICE_IP', '192.168.10.60');
  19. define('MITAC_SERVICE_PORT', 49990);
  20. }
  21. // mitac socket
  22. function mitac_socket($in, $function_name = __FUNCTION__)
  23. {
  24. $in_encode = mb_convert_encoding($in, 'UTF-16LE', 'UTF-8');
  25. trigger_error($function_name . "..|{$in}|". json_encode($in_encode, true));
  26. $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
  27. if ($socket === false) {
  28. trigger_error($function_name . "..socket_create() failed: reason: " . socket_strerror(socket_last_error()));
  29. }
  30. $result = socket_connect($socket, MITAC_SERVICE_IP, MITAC_SERVICE_PORT);
  31. if ($result === false) {
  32. trigger_error($function_name . "..socket_connect() failed.\nReason: ({$result}) " . socket_strerror(socket_last_error($socket)));
  33. return false; // 中斷
  34. }
  35. if(!socket_write($socket, $in_encode, strlen($in_encode)))
  36. {
  37. trigger_error($function_name . '..Write failed..');
  38. }
  39. $out = socket_read($socket, 64);
  40. socket_shutdown($socket);
  41. socket_close($socket);
  42. trigger_error($function_name . "..socket output|{$out}");
  43. return $out;
  44. }
  45. public function init($vars)
  46. {
  47. $this->vars = $vars;
  48. }
  49. // 詢問是否存活
  50. public function echo_mitac_alive()
  51. {
  52. $msg = implode(',', ['Mitac', 'Are you alive']);
  53. $result = $this->mitac_socket($msg, __FUNCTION__);
  54. return 'ok';
  55. }
  56. // 要求扣款 (ALTOB to MITAC)
  57. public function parking_fee_altob($parms)
  58. {
  59. // 轉換成對方要的格式
  60. $seqno = date('Ymd') . '_' . str_pad($parms['seqno'], 10, '0', STR_PAD_LEFT);
  61. $lpr = $parms['lpr'];
  62. $in_time = date('Ymd_His', strtotime($parms['in_time']));
  63. $out_time = date('Ymd_His', strtotime($parms['out_time']));
  64. $gate_id = $parms['gate_id'];
  65. // 產生通訊內容
  66. $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]));
  67. $result = $this->mitac_socket($msg, __FUNCTION__);
  68. return 'ok';
  69. }
  70. // 回應扣款成功 (MITAC to ALTOB)
  71. public function deduct_result($parms)
  72. {
  73. $seqno_arr = explode('_', $parms['seqno']);
  74. $in_time_arr = explode('_', $parms['in_time']);
  75. $out_time_arr = explode('_', $parms['out_time']);
  76. // 解出我方要的資訊
  77. $cario_no = intval(preg_replace( '/[^0-9]/', '', $seqno_arr[1]));
  78. $lpr = $parms['lpr'];
  79. $amt = intval(preg_replace( '/[^0-9]/', '', $parms['amt']));
  80. $amt_discount = intval(preg_replace( '/[^0-9]/', '', $parms['amt_discount']));
  81. $amt_real = intval(preg_replace( '/[^0-9]/', '', $parms['amt_real']));
  82. $in_time = substr($in_time_arr[0], 0, 4). '-' . substr($in_time_arr[0], 4, 2) . '-' . substr($in_time_arr[0], 6, 2) . ' ' .
  83. substr($in_time_arr[1], 0, 2). ':' . substr($in_time_arr[1], 2, 2) . ':' . substr($in_time_arr[1], 4, 2);
  84. $pay_time = $this->now_str;
  85. // 通訊內容
  86. $parms = array(
  87. 'cario_no' => $cario_no,
  88. 'lpr' => $lpr,
  89. 'amt' => $amt,
  90. 'amt_discount' => $amt_discount,
  91. 'amt_real' => $amt_real,
  92. 'in_time' => $in_time,
  93. 'pay_time' => $pay_time);
  94. $function_name = 'mitac2payed';
  95. trigger_error(__FUNCTION__ . "..call {$function_name}.." . print_r($parms, true));
  96. // 驗証碼
  97. $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);
  98. // 呼叫
  99. try{
  100. $ch = curl_init();
  101. curl_setopt($ch, CURLOPT_URL, "http://localhost/carpayment.html/{$function_name}");
  102. curl_setopt($ch, CURLOPT_HEADER, FALSE);
  103. curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
  104. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  105. curl_setopt($ch, CURLOPT_POST, TRUE);
  106. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT ,3);
  107. curl_setopt($ch, CURLOPT_TIMEOUT, 3); //timeout in seconds
  108. curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($parms));
  109. $data = curl_exec($ch);
  110. if(curl_errno($ch))
  111. {
  112. trigger_error(__FUNCTION__ . ', curl error: '. curl_error($ch));
  113. }
  114. curl_close($ch);
  115. trigger_error(__FUNCTION__ . '..'. $data);
  116. }catch (Exception $e){
  117. trigger_error(__FUNCTION__ . 'error:'.$e->getMessage());
  118. }
  119. return 'ok';
  120. }
  121. }