VM暫存
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

186 Zeilen
7.2KB

  1. <?php
  2. /*
  3. file: Ctbcbank_model.php 付費系統 (CTBC 中國信託)
  4. */
  5. class Ctbcbank_model extends CI_Model
  6. {
  7. function __construct()
  8. {
  9. parent::__construct();
  10. $this->load->database();
  11. /*
  12. // ----- 中國信託 - 測試環境 -----
  13. define('CTBC_SSLAuthUI', "https://testepos.ctbcbank.com/auth/SSLAuthUI.jsp"); // URL授權介面
  14. define('CTBC_TYPE1_merID', "10063"); // 特店編號 (交易類型:一般授權)
  15. define('CTBC_TYPE1_MerchantID', "8220276806667"); // 銀行所授與的特店代號,純數字,固定 13 碼。
  16. define('CTBC_TYPE1_TerminalID', "90008466"); // 銀行所授與的終端機代號,純數字,固定 8 碼。
  17. define('CTBC_TYPE1_Key', "ZQFsGRIzb7NqsPcWOLKOL3sj"); // 壓碼 (可由後台重新產生)
  18. define('CTBC_TYPE2_merID', "10064"); // 特店編號 (交易類型:分期付款)
  19. define('CTBC_TYPE2_MerchantID', "8220878791047");
  20. define('CTBC_TYPE2_TerminalID', "91001008");
  21. define('CTBC_TYPE3_merID', "10065"); // 特店編號 (交易類型:紅利折抵)
  22. define('CTBC_TYPE3_MerchantID', "8220800211437");
  23. define('CTBC_TYPE3_TerminalID', "92000235");
  24. // ----- 中國信託 - 測試環境 (END) -----
  25. */
  26. // ----- 中國信託 - 正式環境 -----
  27. define('CTBC_SSLAuthUI', "https://epos.chinatrust.com.tw/auth/SSLAuthUI.jsp"); // URL授權介面
  28. define('CTBC_TYPE1_merID', "10012"); // 特店編號 (交易類型:一般授權)
  29. define('CTBC_TYPE1_MerchantID', "8220131400023"); // 銀行所授與的特店代號,純數字,固定 13 碼。
  30. define('CTBC_TYPE1_TerminalID', "99810789"); // 銀行所授與的終端機代號,純數字,固定 8 碼。
  31. define('CTBC_TYPE1_Key', "4qH0cNXhsmk6jKdTT4hjwYCX"); // 壓碼 (可由後台重新產生)
  32. // ----- 中國信託 - 正式環境 (END) -----
  33. }
  34. // 3.中國信託
  35. public function transfer_money_ctbc($data, $return_url)
  36. {
  37. try{
  38. $lidm = $data['order_no']; // 訂單編號 (<=19 碼)
  39. $purchAmt = $data['amt'];
  40. $txType = "0"; // 交易方式,長度為一碼數字。(一般交易:0, 分期交易:1, 紅利折抵一般交易:2, 紅利折抵分期交易:4)
  41. $debug = "0"; // 預設(進行交易時)請填0,偵錯時請填1。
  42. // 使用 CTBCAgent
  43. include_once(ALTOB_CTBC_FILE);
  44. $oCTBCAgent = new CTBCAgent();
  45. $oCTBCAgent->MerchantID = CTBC_TYPE1_MerchantID;
  46. $oCTBCAgent->TerminalID = CTBC_TYPE1_TerminalID;
  47. $oCTBCAgent->AuthResURL = $return_url;// 從收單行端取得授權碼後,要導回的網址,請勿填入特殊字元@、#、%、?、&等。
  48. $oCTBCAgent->SSLAuthUI = CTBC_SSLAuthUI; // URL授權介面
  49. $oCTBCAgent->Option = "1"; // 一般交易請填「1」。 , 分期交易請填一到兩碼的分期期數。, 紅利交易請填固定兩碼的產品代碼。, 紅利分期交易請填第一至二碼固定為產品代碼,第三碼或三至四碼為分期期數。
  50. $oCTBCAgent->Key = CTBC_TYPE1_Key;
  51. $oCTBCAgent->MerchantName = iconv("UTF-8", "big5", "歐特儀停車場");
  52. $oCTBCAgent->OrderDetail = iconv("UTF-8", "big5", "歐Pa卡");
  53. $oCTBCAgent->AutoCap = "1"; // (0–不自動請款, 1–自動請款)
  54. $oCTBCAgent->Customize = "1"; // 設定刷卡頁顯示特定語系或客制化頁面。(1–繁體中文, 2–簡體中文, 3–英文, 5–客制化頁面)
  55. $data = array(
  56. 'merID' => CTBC_TYPE1_merID,
  57. 'lidm' => $lidm,
  58. 'purchAmt' => $purchAmt,
  59. 'txType' => $txType,
  60. 'debug' => $debug,
  61. 'target' => "_self"
  62. );
  63. $oCTBCAgent->CheckOut($data);
  64. }catch (Exception $e){
  65. // 例外錯誤處理。
  66. throw $e;
  67. }
  68. }
  69. // 3.中國信託 - 回傳
  70. public function ctbcbank_return_handler($resenc, $merid)
  71. {
  72. try{
  73. // 使用 CTBCAgent
  74. include_once(ALTOB_CTBC_FILE);
  75. $oCTBCAgent = new CTBCAgent();
  76. $oCTBCAgent->Key = CTBC_TYPE1_Key;
  77. $debug = "0";
  78. // 解密
  79. $data = array(
  80. 'encRes' => $resenc,
  81. 'debug' => $debug
  82. );
  83. $EncArray = $oCTBCAgent->Decrypt($data);
  84. /*
  85. foreach($EncArray AS $name => $val){
  86. echo $name ."=>". urlencode(trim($val,"\x00..\x08")) ."\n";
  87. }
  88. */
  89. $errdesc = isset($EncArray['errdesc']) ? $EncArray['errdesc'] : "";
  90. $authresurl = isset($EncArray['authresurl']) ? $EncArray['authresurl'] : "";
  91. $xid = isset($EncArray['xid']) ? $EncArray['xid'] : "";
  92. $awardedpoint = isset($EncArray['awardedpoint']) ? $EncArray['awardedpoint'] : "";
  93. $status = isset($EncArray['status']) ? $EncArray['status'] : "";
  94. $errcode = isset($EncArray['errcode']) ? $EncArray['errcode'] : "";
  95. $authcode = isset($EncArray['authcode']) ? $EncArray['authcode'] : "";
  96. $authamt = isset($EncArray['authamt']) ? $EncArray['authamt'] : "";
  97. $lidm = isset($EncArray['lidm']) ? $EncArray['lidm'] : "";
  98. $offsetamt = isset($EncArray['offsetamt']) ? $EncArray['offsetamt'] : "";
  99. $originalamt = isset($EncArray['originalamt']) ? $EncArray['originalamt'] : "";
  100. $utilizedpoint = isset($EncArray['utilizedpoint']) ? $EncArray['utilizedpoint'] : "";
  101. $numberofpay = isset($EncArray['numberofpay']) ? $EncArray['numberofpay'] : ""; // option: 一般交易, 分期交易
  102. $prodcode = isset($EncArray['prodcode']) ? $EncArray['prodcode'] : ""; // option: 紅利交易
  103. $last4digitpan = isset($EncArray['last4digitpan']) ? $EncArray['last4digitpan'] : "";
  104. $pidresult= isset($EncArray['pidresult']) ? $EncArray['pidresult'] : "";
  105. $cardnumber = isset($EncArray['cardnumber']) ? $EncArray['cardnumber'] : "";
  106. $outmac = isset($EncArray['outmac']) ? $EncArray['outmac'] : "";
  107. $data = array(
  108. 'status' => $status,
  109. 'errcode' => $errcode,
  110. 'authcode' => $authcode,
  111. 'authamt' => $authamt,
  112. 'lidm' => $lidm,
  113. 'offsetamt' => $offsetamt,
  114. 'originalamt' => $originalamt,
  115. 'utilizedpoint' => $utilizedpoint,
  116. 'numberofpay' => $numberofpay,
  117. 'prodcode' => $prodcode,
  118. 'last4digitpan' => $last4digitpan,
  119. 'debug' => $debug
  120. );
  121. // 取得 check mac
  122. $MACString = $oCTBCAgent->CheckMac($data);
  123. //echo "checkm=$MACString\n";
  124. //echo "outmac=$outmac\n";
  125. // 驗証內容正確性
  126. if(strcmp($MACString, $outmac) == 0){
  127. $data = array(
  128. 'errdesc' => $errdesc,
  129. 'authresurl' => $authresurl,
  130. 'xid' => $xid,
  131. 'awardedpoint' => $awardedpoint,
  132. 'prodcode' => $prodcode,
  133. 'merid' => $merid,
  134. 'status' => $status,
  135. 'errcode' => $errcode,
  136. 'authcode' => $authcode,
  137. 'authamt' => $authamt,
  138. 'lidm' => $lidm,
  139. 'offsetamt' => $offsetamt,
  140. 'originalamt' => $originalamt,
  141. 'utilizedpoint' => $utilizedpoint,
  142. 'numberofpay' => $numberofpay,
  143. 'last4digitpan' => $last4digitpan,
  144. 'pidresult' => $pidresult,
  145. 'cardnumber' => $cardnumber,
  146. 'outmac' => $outmac
  147. );
  148. }else{
  149. // CHECK MAC FAIL
  150. $data = array(
  151. 'errdesc' => "[CHECK MAC FAIL] MACString=$MACString",
  152. 'merid' => $merid,
  153. 'outmac' => $outmac
  154. );
  155. }
  156. $this->db->insert('ctbc_feedback_log', $data); // 記錄 log
  157. return $data;
  158. }catch (Exception $e){
  159. // 例外錯誤處理。
  160. trigger_error(__FUNCTION__.$e->getMessage());
  161. }
  162. }
  163. }