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.

Mitac_service_model.php 4.4KB

преди 8 години
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  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.221');
  19. define('MITAC_SERVICE_PORT', 49990);
  20. }
  21. // mitac socket
  22. function mitac_socket($in)
  23. {
  24. trigger_error(__FUNCTION__ . "..socket input|{$in}");
  25. return 'ok';
  26. $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
  27. if ($socket === false) {
  28. trigger_error(__FUNCTION__ . "..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__ . "..socket_connect() failed.\nReason: ({$result}) " . socket_strerror(socket_last_error($socket)));
  33. return false; // 中斷
  34. }
  35. if(!socket_write($socket, $in, strlen($in)))
  36. {
  37. trigger_error(__FUNCTION__ . '..Write failed..');
  38. }
  39. $out = socket_read($socket, 64);
  40. socket_shutdown($socket);
  41. socket_close($socket);
  42. trigger_error(__FUNCTION__ . "..socket output|{$out}");
  43. return $out;
  44. }
  45. public function init($vars)
  46. {
  47. $this->vars = $vars;
  48. }
  49. // 要求扣款 (ALTOB to MITAC)
  50. public function parking_fee_altob($parms)
  51. {
  52. // 轉換成對方要的格式
  53. $seqno = date('Ymd') . '_' . str_pad($parms['seqno'], 6, '0', STR_PAD_LEFT);
  54. $lpr = $parms['lpr'];
  55. $in_time = date('Ymd_His', strtotime($parms['in_time']));
  56. $out_time = date('Ymd_His', strtotime($parms['out_time']));
  57. $gate_id = $parms['gate_id'];
  58. // 產生通訊內容
  59. $msg = iconv("UTF-8", "ISO-8859-1", implode(',', ['Mitac', 'ParkingFee_Altob', $seqno, $lpr, $in_time, $out_time, $gate_id]));
  60. $result = $this->mitac_socket($msg);
  61. trigger_error(__FUNCTION__ . "..{$msg}..|{$result}");
  62. return 'ok';
  63. }
  64. // 回應扣款成功 (MITAC to ALTOB)
  65. public function deduct_result($parms)
  66. {
  67. $seqno_arr = explode('_', $parms['seqno']);
  68. $in_time_arr = explode('_', $parms['in_time']);
  69. $out_time_arr = explode('_', $parms['out_time']);
  70. // 解出我方要的資訊
  71. $cario_no = intval(preg_replace( '/[^0-9]/', '', $seqno_arr[1]));
  72. $lpr = $parms['lpr'];
  73. $amt = intval(preg_replace( '/[^0-9]/', '', $parms['amt']));
  74. $amt_discount = intval(preg_replace( '/[^0-9]/', '', $parms['amt_discount']));
  75. $amt_real = intval(preg_replace( '/[^0-9]/', '', $parms['amt_real']));
  76. $in_time = substr($in_time_arr[0], 0, 4). '-' . substr($in_time_arr[0], 4, 2) . '-' . substr($in_time_arr[0], 6, 2) . ' ' .
  77. substr($in_time_arr[1], 0, 2). ':' . substr($in_time_arr[1], 2, 2) . ':' . substr($in_time_arr[1], 4, 2);
  78. $pay_time = $this->now_str;
  79. // 通訊內容
  80. $parms = array(
  81. 'cario_no' => $cario_no,
  82. 'lpr' => $lpr,
  83. 'amt' => $amt,
  84. 'amt_discount' => $amt_discount,
  85. 'amt_real' => $amt_real,
  86. 'in_time' => $in_time,
  87. 'pay_time' => $pay_time);
  88. $function_name = 'mitac2payed';
  89. trigger_error(__FUNCTION__ . "..call {$function_name}.." . print_r($parms, true));
  90. // 驗証碼
  91. $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);
  92. // 呼叫
  93. try{
  94. $ch = curl_init();
  95. curl_setopt($ch, CURLOPT_URL, "http://localhost/carpayment.html/{$function_name}");
  96. curl_setopt($ch, CURLOPT_HEADER, FALSE);
  97. curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
  98. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  99. curl_setopt($ch, CURLOPT_POST, TRUE);
  100. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT ,3);
  101. curl_setopt($ch, CURLOPT_TIMEOUT, 3); //timeout in seconds
  102. curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($parms));
  103. $data = curl_exec($ch);
  104. if(curl_errno($ch))
  105. {
  106. trigger_error(__FUNCTION__ . ', curl error: '. curl_error($ch));
  107. }
  108. curl_close($ch);
  109. trigger_error(__FUNCTION__ . '..'. $data);
  110. }catch (Exception $e){
  111. trigger_error(__FUNCTION__ . 'error:'.$e->getMessage());
  112. }
  113. return 'ok';
  114. }
  115. }