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

219 行
8.5KB

  1. <?php
  2. /*
  3. file: Ctbcbank.php 中國信託介接
  4. */
  5. if ( ! defined('BASEPATH')) exit('No direct script access allowed');
  6. class Ctbcbank extends CI_Controller
  7. {
  8. var $vars = array(); // 共用變數
  9. function __construct()
  10. {
  11. parent::__construct();
  12. // ----- 程式開發階段log設定 -----
  13. if (@ENVIRONMENT == 'development')
  14. {
  15. ini_set('display_errors', '1');
  16. //error_reporting(E_ALL ^ E_NOTICE);
  17. error_reporting(E_ALL);
  18. }
  19. set_error_handler(array($this, 'error_handler'), E_ALL); // 資料庫異動需做log
  20. /*
  21. // 共用記憶體
  22. $this->vars['mcache'] = new Memcache;
  23. $this->vars['mcache']->connect(MEMCACHE_HOST, MEMCACHE_PORT) or die ('Could not connect memcache');
  24. // mqtt subscribe
  25. $this->vars['mqtt'] = new phpMQTT(MQ_HOST, MQ_PORT, uniqid());
  26. if(!$this->vars['mqtt']->connect()){ die ('Could not connect mqtt'); }
  27. */
  28. // ----- 定義常數(路徑, cache秒數) -----
  29. define('APP_VERSION', '100'); // 版本號
  30. define('MAX_AGE', 604800); // cache秒數, 此定義1個月
  31. define('APP_NAME', 'ctbcbank'); // 應用系統名稱
  32. define('PAGE_PATH', APP_BASE.'ci_application/views/'.APP_NAME.'/'); // path of views
  33. define('SERVER_URL', 'http://'.(isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : 'localhost').'/'); // URL
  34. define('APP_URL', SERVER_URL.APP_NAME.'.html/'); // controller路徑
  35. define('WEB_URL', SERVER_URL.APP_NAME.'/'); // 網頁路徑
  36. define('WEB_LIB', SERVER_URL.'libs/'); // 網頁lib
  37. define('BOOTSTRAPS', WEB_LIB.'bootstrap_sb/'); // bootstrap lib
  38. define('LOG_PATH', FILE_BASE.APP_NAME.'/logs/'); // log path
  39. //$this->load->model('twgc_model');
  40. // $this->parkingquery_model->init($this->vars);
  41. $this->load->model('payment_model'); // 帳單
  42. $this->load->model('ctbcbank_model');// 中國信託金流
  43. $this->load->model('allpay_invoice_model'); // 歐付寶電子發票
  44. define('CTBC_AuthResURL', APP_URL."return_ok/"); // 從收單行端取得授權碼後,要導回的網址,請勿填入特殊字元@、#、%、?、&等。
  45. define('MAIN_PAGE', "main_page");
  46. define('RESULT_PAGE', "result_page");
  47. define('ERROR_PAGE', "error_page");
  48. // ----- 回傳訊息 -----
  49. define('RESULT_CODE_OK', "OK");
  50. define('RESULT_CODE_UNKNOWN_ERROR', "-99");
  51. define('RESULT_MSG_UNKNOWN_ERROR', "發生未預期錯誤");
  52. // ----- 回傳訊息 (END) -----
  53. }
  54. // 發生錯誤時集中在此處理
  55. public function error_handler($errno, $errstr, $errfile, $errline, $errcontext)
  56. {
  57. $str = date('H:i:s')."|{$errstr}|{$errfile}|{$errline}|{$errno}\n";
  58. //error_log($str, 3, $log_file . '.' . date('Ymd').'.log.txt'); // 3代表參考後面的檔名
  59. //echo $str;
  60. error_log($str, 3, LOG_PATH.APP_NAME . '.' . date('Ymd').'.log.txt'); // 3代表參考後面的檔名
  61. }
  62. // 顯示靜態網頁(html檔)
  63. protected function show_page($page_name, &$data = null)
  64. {
  65. $page_file = PAGE_PATH.$page_name.'.php';
  66. $last_modified_time = filemtime($page_file);
  67. // 若檔案修改時間沒有異動, 或版本無異動, 通知瀏覽器使用cache, 不再下傳網頁
  68. // header('Cache-Control:max-age='.MAX_AGE); // cache 1個月
  69. header('Last-Modified: '.gmdate('D, d M Y H:i:s', $last_modified_time).' GMT');
  70. header('Etag: '. APP_VERSION);
  71. header('Cache-Control: public');
  72. if (!empty($_SERVER['HTTP_IF_NONE_MATCH']) && $_SERVER['HTTP_IF_NONE_MATCH'] == APP_VERSION && @strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) == $last_modified_time)
  73. {
  74. header('HTTP/1.1 304 Not Modified');
  75. }
  76. else
  77. {
  78. $this->load->view(APP_NAME.'/'.$page_name, $data);
  79. }
  80. }
  81. // 首頁
  82. public function index()
  83. {
  84. $this->show_page(MAIN_PAGE); // http://203.75.167.89/ctbcbank.html
  85. }
  86. // 查車付款 - 1.查車拿帳單
  87. public function payment_lpr()
  88. {
  89. $payment_lpr = $this->input->post('payment_lpr', true);
  90. $data = $this->payment_model->create_cario_bill($payment_lpr);
  91. echo json_encode($data, JSON_UNESCAPED_UNICODE);
  92. }
  93. // 查車付款 - 2.確定繳交帳單
  94. public function transfer_money()
  95. {
  96. $order_no = strtoupper($this->uri->segment(3)); // 交易序號
  97. $invoice_receiver = urldecode($this->uri->segment(4)); // 載具編號 (可有可無)
  98. $company_no = urldecode($this->uri->segment(5)); // 載具編號 (可有可無)
  99. $email_base64 = $this->uri->segment(6); // 電子信箱
  100. $mobile = $this->uri->segment(7); // 手機號碼
  101. // decode email
  102. if(strlen($email_base64) > 0){
  103. $email = base64_decode($email_base64.'='); // base64字串尾端的'='還原
  104. }else{
  105. $email = email_base64;
  106. }
  107. $data = $this->payment_model->pay_bill($order_no, $invoice_receiver, $company_no, $email, $mobile); // 繳交帳單
  108. if (!empty($data)){
  109. $this->ctbcbank_model->transfer_money_ctbc($data, CTBC_AuthResURL); // 中國信託
  110. }
  111. }
  112. // C.4 收單行端取得授權碼後,要導回的網址 (call by CTBC)
  113. public function return_ok()
  114. {
  115. /**
  116. =======ALL_REQUEST======
  117. URLResEnc: AF2100C51A9E844A1E820B953EA512BE49286403253FF9373474F6AE4A5877B084DD4D9B20F03AF0F34DB3D42A9C583938FE5DC1B60C53384864D9581EE997F92552A2F516B04F2FB2FE3E5C10D61CE84C5B63B87379F1048E16AC430AE94989724D8B0087734F73BF40CE904A05D555F526E5A93462C42931A0A7EC1E6AFF8BC39E641A8F5EE8882BD5B02F838BC217A87533AB9FE98CE1DD558B3CC345FC77D06C1783067F75DF94C58B55A826CD33B32355439BF3C9F17A4596138942B4457B66EB8FA09749C246D5B91799FB3942EC90138033272D89861B8698398FF4F3010628C0D11C7D88FB7A5F85CC59717D9F8D5CADBA5A1231E0396AE344B1DA139BA84F9D477E53A73A376BFCC92B52619E3B396BB28ABE7C4CEE3D3ED2CA1BEEF466F2D645C5CBF1C678C5747BA2A048F2F0FC2B86CAE379DE7A7F144D07C31A
  118. merID: 10063
  119. ----------------------------END
  120. */
  121. // 取得回傳資訊
  122. foreach ($_REQUEST as $key => $value) {
  123. switch ($key){
  124. case "URLResEnc": $resenc = $value; break;
  125. case "merID": $merid = $value; break;
  126. }
  127. }
  128. if(! empty($resenc)){
  129. $return_data = $this->ctbcbank_model->ctbcbank_return_handler($resenc, $merid);
  130. $ctbc_lidm = $return_data['lidm'];
  131. $ctbc_authamt = $return_data['authamt'];
  132. $ctbc_status = $return_data['status'];
  133. if($ctbc_status != 0){
  134. // 金流處理失敗
  135. trigger_error(__FUNCTION__.', ctbc_status GG ..lidm=>' . $ctbc_lidm);
  136. }else if(! empty($ctbc_lidm)) {
  137. $data = $this->payment_model->get_tx_bill($ctbc_lidm);
  138. if (! empty($data)) {
  139. $order_no = $data['order_no'];
  140. $lpr = $data['lpr'];
  141. $amt = $data['amt'];
  142. $status = $data['status'];
  143. switch($status){
  144. case 100: // 狀態: 0:剛建立, 1:結帳完成, 2:錢沒對上, 3:發票沒建立, 4:手動調整, 99:訂單逾期作廢, 100:交易進行中, 101: 交易失敗, 111:產品已領取
  145. // 印發票流程
  146. if($ctbc_authamt == $amt){
  147. // 先記錄
  148. $this->payment_model->transfer_money_done($order_no);
  149. // 開立歐付寶電子發票
  150. //$this->allpay_invoice_model->invoice_issue_for_product_bill($order_no, $amt);
  151. // 交易成功
  152. $this->show_page(RESULT_PAGE);
  153. return;
  154. }else{
  155. // 錢沒對上
  156. $this->payment_model->transfer_money_done_with_error_2($order_no);
  157. }
  158. break;
  159. default:
  160. // 對方多傳一次時??
  161. trigger_error(__FUNCTION__.', order_no=>' . $order_no.'<br>'.'status != 100');
  162. }
  163. }else{
  164. // 我們自己找不到記錄時??
  165. trigger_error(__FUNCTION__.', order_no=>' . $order_no.'<br>'.' NOT FOUND !!');
  166. }
  167. }else{
  168. // 回傳沒有資料 lidm
  169. trigger_error(__FUNCTION__.', ERROR ..lidm=>' . $ctbc_lidm);
  170. }
  171. }else{
  172. // 回傳沒有資料 resenc
  173. trigger_error(__FUNCTION__.', ERROR ..resenc=>' . $resenc);
  174. }
  175. // 交易失敗
  176. $this->show_page(ERROR_PAGE);
  177. }
  178. }