VM暫存
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

168 行
6.7KB

  1. <?php
  2. /*
  3. file: Payment_ats_model.php 繳費機
  4. */
  5. class Payment_ats_model extends CI_Model
  6. {
  7. function __construct()
  8. {
  9. parent::__construct();
  10. $this->load->database();
  11. define('PAYMENT_ATS_INVOICE_REMARK', '繳費機帳單');
  12. define('TABLE_NAME_TX_BILL_ATS', 'tx_bill_ats');
  13. }
  14. // 狀態: 結帳完成
  15. public function transfer_money_done($order_no)
  16. {
  17. $data = array();
  18. $data['status'] = 1; // 狀態: 0:剛建立, 1:結帳完成, 2:錢沒對上, 3:發票沒建立, 4:手動調整, 99:訂單逾期作廢, 100:交易進行中, 101: 交易失敗, 111:產品已領取
  19. $this->db->update(TABLE_NAME_TX_BILL_ATS, $data, array('order_no' => $order_no));
  20. return true;
  21. }
  22. // 狀態: 錢沒對上
  23. public function transfer_money_done_with_amt_error($order_no)
  24. {
  25. $data = array();
  26. $data['status'] = 2; // 狀態: 0:剛建立, 1:結帳完成, 2:錢沒對上, 3:發票沒建立, 4:手動調整, 99:訂單逾期作廢, 100:交易進行中, 101: 交易失敗, 111:產品已領取
  27. $this->db->update(TABLE_NAME_TX_BILL_ATS, $data, array('order_no' => $order_no));
  28. return true;
  29. }
  30. // 狀態: 發票沒建立
  31. public function transfer_money_set_invoice_error($order_no)
  32. {
  33. $data = array();
  34. $data['status'] = 3; // 狀態: 0:剛建立, 1:結帳完成, 2:錢沒對上, 3:發票沒建立, 4:手動調整, 99:訂單逾期作廢, 100:交易進行中, 101: 交易失敗, 111:產品已領取
  35. $this->db->update(TABLE_NAME_TX_BILL_ATS, $data, array('order_no' => $order_no));
  36. return true;
  37. }
  38. // 狀態: 訂單逾期作廢
  39. public function transfer_money_timeout($order_no)
  40. {
  41. $data = array();
  42. $data['status'] = 99; // 狀態: 0:剛建立, 1:結帳完成, 2:錢沒對上, 3:發票沒建立, 4:手動調整, 99:訂單逾期作廢, 100:交易進行中, 101: 交易失敗, 111:產品已領取
  43. $this->db->update(TABLE_NAME_TX_BILL_ATS, $data, array('order_no' => $order_no));
  44. return true;
  45. }
  46. // 狀態: 交易失敗
  47. public function transfer_money_done_with_tx_error($order_no)
  48. {
  49. $data = array();
  50. $data['status'] = 101; // 狀態: 0:剛建立, 1:結帳完成, 2:錢沒對上, 3:發票沒建立, 4:手動調整, 99:訂單逾期作廢, 100:交易進行中, 101: 交易失敗, 111:產品已領取
  51. $this->db->update(TABLE_NAME_TX_BILL_ATS, $data, array('order_no' => $order_no));
  52. return true;
  53. }
  54. // 狀態: 產品已領取
  55. public function transfer_money_done_and_finished($order_no)
  56. {
  57. $data = array();
  58. $data['status'] = 111; // 狀態: 0:剛建立, 1:結帳完成, 2:錢沒對上, 3:發票沒建立, 4:手動調整, 99:訂單逾期作廢, 100:交易進行中, 101: 交易失敗, 111:產品已領取
  59. $this->db->update(TABLE_NAME_TX_BILL_ATS, $data, array('order_no' => $order_no));
  60. return true;
  61. }
  62. // 建立帳單 (會員)
  63. public function create_member_bill($lpr)
  64. {
  65. $result = $this->db->select("station_no, member_no, member_name, date_format(end_date, '%Y-%m-%d') as end_date, amt, remarks,
  66. date_add(date_format(end_date, '%Y-%m-%d'), INTERVAL 1 day) as next_start,
  67. date_add(date_format(end_date, '%Y-%m-%d'), INTERVAL 1 MONTH) as next_end", false)
  68. ->from('members')
  69. ->where('lpr', $lpr)
  70. ->get()
  71. ->row_array();
  72. if(empty($result['member_no'])){
  73. // 查無會員資料
  74. $data = array();
  75. $data['member_no'] = 0;
  76. return $data;
  77. }
  78. else
  79. {
  80. // 建立會員帳單
  81. $data = array();
  82. $data['invoice_remark'] = PAYMENT_ATS_INVOICE_REMARK;
  83. $data['order_no'] = $result['member_no'].time(); // 交易序號
  84. $data['station_no'] = $result['station_no']; // 場站編號
  85. $data['member_no'] = $result['member_no']; // 會員編號
  86. $data['member_name'] = $result['member_name']; // 車主姓名
  87. //$data['amt'] = 10; // 租金金額 (test only)
  88. $data['amt'] = $result['amt']; // 租金金額
  89. $data['remarks'] = $result['remarks']; // 備註
  90. $data['end_time'] = $result['end_date'] . ' 23:59:59'; // 到期日
  91. $data['next_start_time'] = $result['next_start']. ' 00:00:00'; // 次期起始日
  92. $data['next_end_time'] = $result['next_end'] . ' 23:59:59'; // 次期到期日
  93. $data['lpr'] = strtoupper($lpr); // 車牌號碼
  94. $data['balance_time_limit'] = date("Y-m-d H:i:s", strtotime('+ 15 minutes')); // 帳單有效期限 15 min
  95. $this->db->insert(TABLE_NAME_TX_BILL_ATS, $data);
  96. return $data;
  97. }
  98. trigger_error(APP_NAME.', '.__FUNCTION__.', order_no=>' . $order_no."|{$lpr}|無資料");
  99. }
  100. // 繳交帳單 (帳單)
  101. public function pay_bill($order_no, $invoice_receiver, $company_no, $email, $mobile, $clientBackUrl, $orderResultUrl, $serviceUrl, $tx_type=0)
  102. {
  103. $data = $this->get_tx_bill($order_no);
  104. if (!empty($data))
  105. {
  106. if($data['status'] != 0){
  107. trigger_error(APP_NAME.', '.__FUNCTION__.', order_no=>' . $order_no."|error status: ". $data['status']);
  108. return null;
  109. }
  110. if(strlen($invoice_receiver) >= 7){ // 手機載具編號
  111. $data['invoice_receiver'] = '/'.$invoice_receiver;
  112. }
  113. if(strlen($company_no) >= 8){ // 公司統編
  114. $data['company_no'] = $company_no;
  115. $data['company_receiver'] = "公司名稱";
  116. $data['company_address'] = "公司地址";
  117. }
  118. if(strlen($email) >= 5){ // a@b.c
  119. $data['email'] = $email;
  120. }
  121. if(strlen($mobile) >= 10){ // 手機
  122. $data['mobile'] = $mobile;
  123. }
  124. $txTime = time(); // 產生交易時間
  125. if(strtotime($data['balance_time_limit']) - $txTime > 0){
  126. $data['status'] = 100; //狀態: 0:剛建立, 1:結帳完成, 2:錢沒對上, 3:發票沒建立, 4:手動調整, 99:訂單逾期作廢, 100:交易進行中
  127. $data['tx_time'] = date('Y/m/d H:i:s', $txTime);
  128. $data['tx_type'] = $tx_type; // 交易種類: 0:未定義, 1:現金, 40:博辰人工模組, 41:博辰自動繳費機, 50:歐付寶轉址刷卡, 51:歐付寶APP, 52:歐付寶轉址WebATM, 60:中國信託刷卡轉址
  129. $data['client_back_url'] = $clientBackUrl;
  130. $data['order_result_url'] = $orderResultUrl;
  131. $data['service_url'] = $serviceUrl;
  132. $this->db->update(TABLE_NAME_TX_BILL_ATS, $data, array('order_no' => $order_no));
  133. return $data;
  134. }
  135. $this->transfer_money_timeout($order_no); // 訂單逾期作廢
  136. return null;
  137. }
  138. trigger_error(APP_NAME.', '.__FUNCTION__.', order_no=>' . $order_no."|無帳單資料");
  139. }
  140. // 取得帳單資料
  141. public function get_tx_bill($order_no)
  142. {
  143. $result = $this->db
  144. ->from(TABLE_NAME_TX_BILL_ATS)
  145. ->where(array('order_no' => $order_no))
  146. ->limit(1)
  147. ->get()
  148. ->row_array();
  149. return $result;
  150. }
  151. }