TWGCAgent(); } /** * 取得TWGC 服務的實體。 */ function TWGCAgent() { } /** * API 1: 查詢 BarCode * * 說明: 查詢 BarCode 狀態、餘額及紅利點數 * * [data] * *BarCode:卡號 */ public function BalanceInquiry($data) { extract($data); if (empty($POSTime)) { $POSTime = date('Y/m/d H:i:s', time()); } if (empty($MbrPhone)) { $MbrPhone = ""; } $BarCode_str = ''; if (isset($BarCode)) { $BarCode_str = ''. $BarCode .''; } $Card_str = $BarCode_str; $xml = ' '. $this->IssuerID .' '. $this->StoreID .' '. $this->POSID .' '. $CustTrxNo .' '. $Card_str .' '. $MbrPhone .' '. $POSTime .' '; return $this->getResultXml(__FUNCTION__, $xml); } /** * API 2: 卡片記名 * * 說明: 將 BarCode 綁定 UserID * * [data] * *UserID:會員編號 (最多 20 字元) * UserName:會員姓名 * UserSex:會員性別 (M/F/空字串 ) * Birthday:會員生日 (YYYY/MM/DD) * Addr:會員地址 * Email:會員電子郵件 * TelHZone:會員市內電話區碼 * TelH:會員市內電話 * MbrPhone:手機號碼 * Memo:備註 * *BarCode:記名卡號 */ public function Register($data) { extract($data); if (empty($POSTime)) { $POSTime = date('Y/m/d H:i:s', time()); } if (empty($Birthday)) { $Birthday = $POSTime; } if (empty($UserName)) { $UserName = ""; } if (empty($UserSex)) { $UserSex = ""; } if (empty($Addr)) { $Addr = ""; } if (empty($Email)) { $Email = ""; } if (empty($TelHZone)) { $TelHZone = ""; } if (empty($TelH)) { $TelH = ""; } if (empty($MbrPhone)) { $MbrPhone = ""; } if (empty($Memo)) { $Memo = ""; } if (empty($StaffID)) { $StaffID = ""; } $xml = ' '. $this->IssuerID .' '. $this->StoreID .' '. $this->POSID .' '. $CustTrxNo .' '. $UserID .' '. $MbrPhone .' '. $BarCode .' '. $POSTime .' '. $StaffID .' '; /* $xml = ' '. $this->IssuerID .' '. $this->StoreID .' '. $this->POSID .' '. $CustTrxNo .' '. $UserID .' '. $UserName .' '. $UserSex .' '. $Birthday .' '. $Addr .' '. $Email .' '. $TelHZone .' '. $TelH .' '. $MbrPhone .' '. $Memo .' '. $BarCode .' '. $POSTime .' '. $StaffID .' '; */ return $this->getResultXml(__FUNCTION__, $xml); } /** * API 3: 虛擬卡開卡 * * 說明: 用 EAN 去建立任意面額的 BarCode, 剛建立好的 BarCode 未綁定 UserID * * [data] * *EAN:卡號前 13碼 * *Amount:卡片面額 * Timeout:未收到開卡結果的Timeout時間,0~999 */ public function VirtualCardActivation($data) { extract($data); if (empty($TransTime)) { $TransTime = date('Y/m/d H:i:s', time()); } if (empty($Timeout)) { $Timeout = 100; } // 未收到開卡結果的Timeout時間,0~999 $EAN_str = ''; if (isset($EAN)) { $EAN_str = ''. $EAN .''; } $Amount_str = ''; if (isset($Amount)) { $Amount_str = ''. $Amount .''; } $Card_str = $EAN_str.$Amount_str; $xml = ' '. $this->IssuerID .' '. $this->StoreID .' '. $this->POSID .' '. $CustTrxNo .' '. $TransTime .' '. $Timeout .' '. $Card_str .' '; return $this->getResultXml(__FUNCTION__, $xml); } /** * API 4: 退款 * * 說明: 退款作業 (取消消費交易) * * [data] * *CustTrxNo:原交易序號 * *AuthCode:原交易授權碼 */ public function Refund($data) { extract($data); if (empty($POSTime)) { $POSTime = date('Y/m/d H:i:s', time()); } if (empty($MbrPhone)) { $MbrPhone = ""; } if (empty($StaffID)) { $StaffID = ""; } $xml = ' '. $this->IssuerID .' '. $this->StoreID .' '. $this->POSID .' '. $CustTrxNo .' '. $AuthCode .' '. $MbrPhone .' '. $POSTime .' '. $StaffID .' '; return $this->getResultXml(__FUNCTION__, $xml); } /** * API 5: 確認交易結果 * * 說明: 確認交易結果 * * [data] * *CustTrxNo:原交易序號 */ public function CheckResult($data) { extract($data); if (empty($POSTime)) { $POSTime = date('Y/m/d H:i:s', time()); } if (empty($MbrPhone)) { $MbrPhone = ""; } $xml = ' '. $this->IssuerID .' '. $this->StoreID .' '. $this->POSID .' '. $CustTrxNo .' '. $MbrPhone .' '. $POSTime .' '; return $this->getResultXml(__FUNCTION__, $xml); } /** * API 6: 會員綁定卡片消費 * * 說明: 使用 已綁定 MemberID 的 BarCode 消費 * * [data] * *MemberID:會員編號 (ex. 車號) * *BarCode:卡號 * ReqAmount:總交易金額 總交易金額 (包含非 卡片交易金額 ) * *Amount:卡片 交易金額 (包含使 用紅利點數金額 ) * ProductID:商品代號 * ReedemPointsForCash:使用紅利點數折抵功能,會以紅利可折抵的最大金額扣除紅利,並優先扣除 , 使用請填 “Y”,不使用則不填 */ public function BalanceMaintenance3($data, $redeem) { extract($data); if (empty($POSTime)) { $POSTime = date('Y/m/d H:i:s', time()); } $RedeemPointsForCash = ""; if ($redeem) { $RedeemPointsForCash = "Y"; // 紅利點數折抵 } if (empty($ReqAmount)) { $ReqAmount = ""; } if (empty($MbrPhone)) { $MbrPhone = ""; } if (empty($StaffID)) { $StaffID = ""; } if (empty($ProductID)) { $ProductID = ""; } $xml = ' '. $this->IssuerID .' '. $this->StoreID .' '. $this->POSID .' '. $MemberID .' '. $BarCode .' '. $ReqAmount .' '. $Amount .' '. $CustTrxNo .' '. $MbrPhone .' '. $POSTime .' '. $StaffID .' '. $ProductID .' '. $RedeemPointsForCash .' '; return $this->getResultXml(__FUNCTION__, $xml); } /** * API 7: 取消卡片記名 * * 說明: 取消卡片記名 * * [data] * *UserID:要取消記名的會員編號 * *MbrPhone:要取消記名的會員電話 * *BarCode:要取消記名的卡號 */ public function UnRegister($data) { extract($data); if (empty($POSTime)) { $POSTime = date('Y/m/d H:i:s', time()); } if (empty($MbrPhone)) { $MbrPhone = ""; } if (empty($StaffID)) { $StaffID = ""; } $xml = ' '. $this->IssuerID .' '. $this->StoreID .' '. $this->POSID .' '. $CustTrxNo .' '. $UserID .' '. $MbrPhone .' '. $BarCode .' '. $POSTime .' '. $StaffID .' '; return $this->getResultXml(__FUNCTION__, $xml); } /** * API 8: 卡片儲值 * * 說明: * 1. 實體卡: 括開銀漆後會有 PIN 碼, 輸入 PIN 即可代表該卡片 * 2. 虛擬卡: 要先向 TWGC 取得一個一次性的密碼作為 PIN 碼, 進行儲值交易 (GetOTPin2) * * [data] * *Amount:儲值金額最大共10碼數字,單位為元 * PromotionID:促銷活動代號 (填空字串即可) * PIN:儲值碼 * */ public function Reload2($data) { extract($data); if (empty($POSTime)) { $POSTime = date('Y/m/d H:i:s', time()); } if (empty($PIN)) { $PIN = ""; } if (empty($MbrPhone)) { $MbrPhone = ""; } if (empty($StaffID)) { $StaffID = ""; } if (empty($PromotionID)) { $PromotionID = ""; } $xml = ' '. $this->IssuerID .' '. $this->StoreID .' '. $this->POSID .' '. $CustTrxNo .' '. $PIN .' '. $Amount .' '. $MbrPhone .' '. $POSTime .' '. $StaffID .' '. $PromotionID .' '; return $this->getResultXml(__FUNCTION__, $xml); } /** * API 9: 取得卡片儲值 PIN 碼 * * 說明: * GetOTPin2 會回傳一個圖檔 (以 base64 解碼還原為圖檔), 圖檔裡有 PIN 碼 * * [data] * *RequestTime:本機時間 * *PasswordType:固定填寫 ‘TWGCAPP’ * *Size:回傳圖檔大小 (L/M/S) */ public function GetOTPin2($data) { extract($data); if (empty($RequestTime)) { $RequestTime = date('Y/m/d H:i:s', time()); } if (empty($PasswordType)) { $PasswordType = "TWGCAPP"; } if (empty($Size)) { $Size = "S"; } $xml = ' '. $RequestTime .' '. $PasswordType .' '. $BarCode .' '. $Size .' '; return $this->getResultXml(__FUNCTION__, $xml); } /** * API 10: 停用 * * 說明: 停用 Barcode * * [data] * *BarCode:要停用的卡號 * *Reason: 停用原因 (1.遺失, 2.損壞, 3.更換新卡而停用本卡, 4.單純停用) */ public function Suspend($data) { extract($data); if (empty($PIN)) { $PIN = ""; } if (empty($MbrPhone)) { $MbrPhone = ""; } if (empty($TransTime)) { $TransTime = date('Y-m-d H:i:s', time()); } if (empty($Reason)) { $Reason = "4"; } // 4.單純停用 $xml = ' '. $this->IssuerID .' '. $this->StoreID .' '. $this->POSID .' '. $CustTrxNo .' '. $BarCode .' '. $PIN .' '. $MbrPhone .' '. $TransTime .' '. $Reason .' '; return $this->getResultXml(__FUNCTION__, $xml); } /** * 取得 TWGC 回傳 XML */ private function getResultXml($function, $xml) { $url = $this->ServiceURL.'/'.$function; $parameters = array( 'issuerIdentity' => $this->issuerIdentity, 'xml' => base64_encode($xml) ); $spResult = $this->ServerPost($url, $parameters); // parse result $result_decode = base64_decode(substr(simplexml_load_string($spResult), 5)); //echo json_encode(simplexml_load_string($result_decode)); return simplexml_load_string($result_decode); } private function ServerPost($url, $parameters=array()) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, FALSE); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_POST, TRUE); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($parameters)); $rs = curl_exec($ch); curl_close($ch); return $rs; } }