|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499 |
- <?php
-
- /**
- * API 代碼
- */
- abstract class TWGC_API_NO
- {
- const BalanceInquiry = 1; // 1: 查詢 BarCode
- const Register = 2; // 2: 卡片記名
- const VirtualCardActivation = 3;// 3: 虛擬卡開卡
- const Refund = 4; // 4: 退款
- const CheckResult = 5; // 5: 確認交易結果
- const BalanceMaintenance3 = 6; // 6: 會員綁定卡片消費
- const UnRegister = 7; // 7: 取消卡片記名
- const Reload2 = 8; // 8: 卡片儲值
- const GetOTPin2 = 9; // 9: 拿PIN碼
- const Suspend = 10; // 10: 停用
- }
-
- /**
- * 取得APP TOKEN服務的類別。
- */
- class TWGCAgent {
-
- public $issuerIdentity = "issuerIdentity";
- public $IssuerID = "IssuerID";
- public $StoreID = "StoreID";
- public $POSID = "POSID";
- public $ServiceURL = "ServiceURL";
-
- /**
- * 取得TWGC 服務的建構式。
- */
- function __construct() {
- $this->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>'. $BarCode .'</BarCode>';
- }
-
- $Card_str = $BarCode_str;
-
- $xml =
- '<DPReq>
- <IssuerID>'. $this->IssuerID .'</IssuerID>
- <StoreID>'. $this->StoreID .'</StoreID>
- <POSID>'. $this->POSID .'</POSID>
-
- <CustTrxNo>'. $CustTrxNo .'</CustTrxNo>
- <Detail>
- <Card>'. $Card_str .'</Card>
- </Detail>
- <MbrPhone>'. $MbrPhone .'</MbrPhone>
- <POSTime>'. $POSTime .'</POSTime>
- </DPReq>';
-
- 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 =
- '<DPReq>
- <IssuerID>'. $this->IssuerID .'</IssuerID>
- <StoreID>'. $this->StoreID .'</StoreID>
- <POSID>'. $this->POSID .'</POSID>
-
- <CustTrxNo>'. $CustTrxNo .'</CustTrxNo>
- <UserID>'. $UserID .'</UserID>
- <MbrPhone>'. $MbrPhone .'</MbrPhone>
- <BarCode>'. $BarCode .'</BarCode>
- <POSTime>'. $POSTime .'</POSTime>
- <StaffID>'. $StaffID .'</StaffID>
- </DPReq>';
-
- /*
- $xml =
- '<DPReq>
- <IssuerID>'. $this->IssuerID .'</IssuerID>
- <StoreID>'. $this->StoreID .'</StoreID>
- <POSID>'. $this->POSID .'</POSID>
-
- <CustTrxNo>'. $CustTrxNo .'</CustTrxNo>
- <UserID>'. $UserID .'</UserID>
- <UserName>'. $UserName .'</UserName>
- <UserSex>'. $UserSex .'</UserSex>
- <Birthday>'. $Birthday .'</Birthday>
- <Addr>'. $Addr .'</Addr>
- <Email>'. $Email .'</Email>
- <TelHZone>'. $TelHZone .'</TelHZone>
- <TelH>'. $TelH .'</TelH>
- <MbrPhone>'. $MbrPhone .'</MbrPhone>
- <Memo>'. $Memo .'</Memo>
- <BarCode>'. $BarCode .'</BarCode>
- <POSTime>'. $POSTime .'</POSTime>
- <StaffID>'. $StaffID .'</StaffID>
- </DPReq>';
- */
-
- 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>'. $EAN .'</EAN>';
- }
- $Amount_str = '';
- if (isset($Amount)) {
- $Amount_str = '<Amount>'. $Amount .'</Amount>';
- }
-
- $Card_str = $EAN_str.$Amount_str;
-
- $xml =
- '<DPReq>
- <IssuerID>'. $this->IssuerID .'</IssuerID>
- <StoreID>'. $this->StoreID .'</StoreID>
- <POSID>'. $this->POSID .'</POSID>
-
- <CustTrxNo>'. $CustTrxNo .'</CustTrxNo>
- <TransTime>'. $TransTime .'</TransTime>
- <Timeout>'. $Timeout .'</Timeout>
- <Detail>
- <Card>'. $Card_str .'</Card>
- </Detail>
- </DPReq>';
-
- 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 =
- '<DPReq>
- <IssuerID>'. $this->IssuerID .'</IssuerID>
- <StoreID>'. $this->StoreID .'</StoreID>
- <POSID>'. $this->POSID .'</POSID>
-
- <CustTrxNo>'. $CustTrxNo .'</CustTrxNo>
- <AuthCode>'. $AuthCode .'</AuthCode>
- <MbrPhone>'. $MbrPhone .'</MbrPhone>
- <POSTime>'. $POSTime .'</POSTime>
- <StaffID>'. $StaffID .'</StaffID>
- </DPReq>';
-
- 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 =
- '<DPReq>
- <IssuerID>'. $this->IssuerID .'</IssuerID>
- <StoreID>'. $this->StoreID .'</StoreID>
- <POSID>'. $this->POSID .'</POSID>
-
- <CustTrxNo>'. $CustTrxNo .'</CustTrxNo>
- <MbrPhone>'. $MbrPhone .'</MbrPhone>
- <POSTime>'. $POSTime .'</POSTime>
- </DPReq>';
-
- 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 =
- '<DPReq>
- <IssuerID>'. $this->IssuerID .'</IssuerID>
- <StoreID>'. $this->StoreID .'</StoreID>
- <POSID>'. $this->POSID .'</POSID>
-
- <MemberID>'. $MemberID .'</MemberID>
- <BarCode>'. $BarCode .'</BarCode>
- <ReqAmount>'. $ReqAmount .'</ReqAmount>
- <Amount>'. $Amount .'</Amount>
- <CustTrxNo>'. $CustTrxNo .'</CustTrxNo>
- <MbrPhone>'. $MbrPhone .'</MbrPhone>
- <POSTime>'. $POSTime .'</POSTime>
- <StaffID>'. $StaffID .'</StaffID>
- <ProductID>'. $ProductID .'</ProductID>
- <RedeemPointsForCash>'. $RedeemPointsForCash .'</RedeemPointsForCash>
- </DPReq>';
-
- 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 =
- '<DPReq>
- <IssuerID>'. $this->IssuerID .'</IssuerID>
- <StoreID>'. $this->StoreID .'</StoreID>
- <POSID>'. $this->POSID .'</POSID>
-
- <CustTrxNo>'. $CustTrxNo .'</CustTrxNo>
- <UserID>'. $UserID .'</UserID>
- <MbrPhone>'. $MbrPhone .'</MbrPhone>
- <BarCode>'. $BarCode .'</BarCode>
- <POSTime>'. $POSTime .'</POSTime>
- <StaffID>'. $StaffID .'</StaffID>
- </DPReq>';
-
- 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 =
- '<DPReq>
- <IssuerID>'. $this->IssuerID .'</IssuerID>
- <StoreID>'. $this->StoreID .'</StoreID>
- <POSID>'. $this->POSID .'</POSID>
-
- <CustTrxNo>'. $CustTrxNo .'</CustTrxNo>
- <PIN>'. $PIN .'</PIN>
- <Amount>'. $Amount .'</Amount>
- <MbrPhone>'. $MbrPhone .'</MbrPhone>
- <POSTime>'. $POSTime .'</POSTime>
- <StaffID>'. $StaffID .'</StaffID>
- <PromotionID>'. $PromotionID .'</PromotionID>
- </DPReq>';
-
- 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 =
- '<DPReq>
- <RequestTime>'. $RequestTime .'</RequestTime>
- <PasswordType>'. $PasswordType .'</PasswordType>
- <BarCode>'. $BarCode .'</BarCode>
- <Size>'. $Size .'</Size>
- </DPReq>';
-
- 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 =
- '<DPReq>
- <IssuerID>'. $this->IssuerID .'</IssuerID>
- <StoreID>'. $this->StoreID .'</StoreID>
- <POSID>'. $this->POSID .'</POSID>
-
- <CustTrxNo>'. $CustTrxNo .'</CustTrxNo>
- <BarCode>'. $BarCode .'</BarCode>
- <PIN>'. $PIN .'</PIN>
- <MbrPhone>'. $MbrPhone .'</MbrPhone>
- <TransTime>'. $TransTime .'</TransTime>
- <Reason>'. $Reason .'</Reason>
- </DPReq>';
-
- 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;
- }
-
- }
|