_username = $username; $this->_password = $password; } public function setParameter($key, $value) { $this->_parameters[$key] = $value; } public function getParameter($key, $defvalue = false) { if(isset($this->_parameters[$key])) { return $this->_parameters[$key]; } return $defvalue; } public function getRequiredParams() { return self::$REQUIRED_PARAMETERS; } public function getServiceURL($type = false) { if($type) { switch(strtoupper($type)) { case self::SERVICE_AUTH: return self::SERVICE_URI . '/http/auth'; case self::SERVICE_SEND: return self::SERVICE_URI . $this->getParameter(self::AUTH_HASH).'/api.v1/send'; case self::SERVICE_QUERY: return self::SERVICE_URI . $this->getParameter(self::AUTH_HASH).'/api.v1/query/'; } } return false; } public function send($message, $tonumbers) { if(!is_array($tonumbers)) { $tonumbers = array($tonumbers); } $serviceURL = $this->getServiceURL(self::SERVICE_SEND); $httpClient = new Vtiger_Net_Client($serviceURL); $results = array(); foreach($tonumbers as $number) { $param = array( 'sender' => $this->getParameter(self::SENDER), 'message' => $message, 'phone' => $number, 'output' => 'json' ); if(!check_gsm($message)){ $param['unicode'] = 'on'; } $response = $httpClient->doGet($param); $responseLine = trim($response); $result = array( 'error' => false, 'statusmessage' => '' ); $reply = json_decode($responseLine, true); if(key($reply) == 'error') { $result['id'] = 'error'; $result['error'] = true; $result['to'] = $number; $result['statusmessage'] = $reply['error']['message']; // Complete error message } if(key($reply) == 'submitted') { $result['id'] = $reply['id']; $result['to'] = $number; $result['status'] = self::MSG_STATUS_PROCESSING; } $results[] = $result; } return $results; } public function query($messageid) { if(empty($messageid)){ $result['error'] = true; $result['needlookup'] = 0; $result['statusmessage'] = 'Error'; return($result); } $serviceURL = $this->getServiceURL(self::SERVICE_QUERY); $httpClient = new Vtiger_Net_Client($serviceURL.$messageid); $response = $httpClient->doGet(array( 'output' => 'json' )); $response = trim($response); $result = array( 'error' => false, 'needlookup' => 1, 'statusmessage' => '' ); $reply = array(); $reply = json_decode($response, true); if(key($reply) == 'error') { $result['error'] = true; $result['needlookup'] = 0; $result['statusmessage'] = 'Error'; } else { $result['id'] = $messageid; // Capture the status code as message by default. $result['statusmessage'] = "unknown"; switch(key($reply)) { case 'queued': $statusMessage = 'Message is waiting in queue'; $result['status'] = self::MSG_STATUS_PROCESSING; $needlookup = 1; break; case 'submitting': $statusMessage = 'Message is about to be submitted'; $needlookup = 1; break; case 'submitted': $statusMessage = 'Message has been sent'; $result['status'] = self::MSG_STATUS_DISPATCHED; $needlookup = 1; break; case 'delivered': $result['status'] = 'Delivered';$statusMessage = 'Message delivered to phone'; $needlookup = 0; break; case 'submitFailed': $statusMessage = 'Message rejected (invalid recipient, invalid senderID)'; $needlookup = 0; break; case 'deliveryFailed': $statusMessage = 'Message undelivered (non-existent number, roaming error)'; $needlookup = 0; break; } if(!empty($statusMessage)) { $result['needlookup'] = $needlookup; $result['statusmessage'] = $statusMessage; } } return $result; } } ?>