_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) {
return false;
}
public function send($message, $tonumbers) {
if (!is_array($tonumbers)) {
$tonumbers = array($tonumbers);
}
$sender = $this->getParameter(self::SENDER_PARAM);
$message = htmlspecialchars($message);
$results = array();
$src = "".
"$sender$message";
$ix = 1;
foreach ($tonumbers as $to) {
$src .= "";
$ix++;
}
$src .= "_username\" />_password\" />";
$response_xml = $this->curl_send($src, 'xml.sms16.ru/xml/');
$response = simplexml_load_string($response_xml);
$error = (string)$response->error;
$ix = 0;
foreach ($tonumbers as $to) {
$result['id'] = time(); // generate id
$result['to'] = $to;
if (!empty($error)) {
$result['error'] = true;
$result['status'] = self::MSG_STATUS_ERROR;
$result['statusmessage'] = $error;
} else {
if (is_object($response->information[$ix])) {
$response_attrs = $response->information[$ix]->attributes();
$result['id'] = (string)$response_attrs["id_sms"];
if (!empty($result['id'])) {
$result['error'] = false;
$result['status'] = self::MSG_STATUS_PROCESSING;
} else {
$result['error'] = true;
$result['status'] = self::MSG_STATUS_ERROR;
$result['statusmessage'] = (string)$response->information;
}
} else {
$result['error'] = true;
$result['status'] = self::MSG_STATUS_ERROR;
$result['statusmessage'] = (string)$response->information;
}
}
$ix++;
$results[] = $result;
}
return $results;
}
public function query($messageid) {
if (empty($messageid)){
$result['error'] = true;
$result['needlookup'] = 0;
$result['statusmessage'] = 'Пустой идентификатор сообщения';
$result['status'] = self::MSG_STATUS_ERROR;
return ($result);
}
$src = "".
"_username\" />_password\" />".
"$messageid";
$response_xml = $this->curl_send($src, 'xml.sms16.ru/xml/state.php');
@$response = simplexml_load_string($response_xml);
$result['id'] = $messageid;
if (!empty($response->error)) {
$result['error'] = true;
$result['needlookup'] = 0;
$result['status'] = self::MSG_STATUS_ERROR;
$result['statusmessage'] = $response->error;
} else {
$result['error'] = false;
$msg = "";
switch($response->state[0]) {
case 'send':
// статус сообщения не получен. В этом случае передается пустой time
$msg = "Статус сообщения не получен";
$result['status'] = self::MSG_STATUS_PROCESSING;
$result['needlookup'] = 1;
break;
case 'partly_deliver':
// сообщение было отправлено, но статус так и не был получен.
// Конечный статус (не меняется со временем).
// В этом случае для разъяснения причин отсутствия статуса необходимо связаться со службой тех. поддержки
$msg = "Сообщение было отправлено, но статус так и не был получен";
$result['status'] = self::MSG_STATUS_FAILED;
$result['needlookup'] = 0;
$result['error'] = true;
break;
case 'not_deliver':
// сообщение не было доставлено. Конечный статус (не меняется со временем)
$msg = "Сообщение не было доставлено";
$result['status'] = self::MSG_STATUS_FAILED;
$result['needlookup'] = 0;
break;
case 'expired':
// абонент находился не в сети в те моменты, когда делалась попытка доставки. Конечный статус (не меняется со временем)
$msg = "Абонент находился вне сети";
$result['status'] = self::MSG_STATUS_FAILED;
$result['needlookup'] = 0;
break;
case 'deliver':
// сообщение доставлено. Конечный статус (не меняется со временем)
$msg = "Сообщение доставлено";
$result['status'] = self::MSG_STATUS_DELIVERED;
$result['needlookup'] = 0;
break;
default:
$msg = "Неизвестный статус";
$result['status'] = self::MSG_STATUS_ERROR;
$result['needlookup'] = 0;
$result['error'] = true;
break;
}
$result['statusmessage'] = $msg;
}
return $result;
}
private function curl_send($xml, $url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: text/xml; charset=utf-8'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CRLF, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_SSLVERSION,3);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
curl_setopt($ch, CURLOPT_URL, $url);
$response_xml = curl_exec($ch);
curl_close($ch);
return $response_xml;
}
}
?>