Отправляем SMS.ru с удобством
02-08-2010Было дело, проскакивала на хабре статься о сервисе sms.ru Попробовал, работает. Понравилось. Тогда на этом дело и закончилось. Но вот недавно потребовалось мне сделать отправку SMS подписавшимся клиентам. API на сайте сервиса хорошо документирован и приведены примеры, но не хватает удобства использования. В результате написал небольшой класс для взаимодействия с sms.ru.
Copy Source | Copy HTML
-
- /**
* Класс взаимодействия с сервисом sms.ru
*/
- class Z_Service_Sms {
-
- protected $_apiId = NULL;
- protected $_responseCode = NULL;
- protected $_lastAction = NULL;
-
- const HOST = 'http://sms.ru/';
- const SEND = 'sms/send?';
- const STATUS = 'sms/status?';
- const BALANCE = 'my/balance?';
- const LIMIT = 'my/limit?';
-
- protected $_responseCodeTranstale = array(
- 'send' => array(
- '100' => 'Сообщение принято к отправке',
- '200' => 'Неправильный api_id',
- '201' => 'Не хватает средств на лицевом счету',
- '202' => 'Неправильно указан получатель',
- '203' => 'Нет текста сообщения',
- '204' => 'Имя отправителя не согласовано с администрацией',
- '205' => 'Сообщение слишком длинное (превышает 5 СМС)',
- '206' => 'Превышен дневной лимит на отправку сообщений',
- '207' => 'На этот номер нельзя отправлять сообщения',
- '208' => 'Параметр time указан неправильно',
- '210' => 'Используется GET, где необходимо использовать POST',
- '211' => 'Метод не найден',
- '220' => 'Сервис временно недоступен, попробуйте чуть позже.',
- ),
- 'status' => array(
- '-1' => 'Сообщение не найдено',
- '100' => 'Сообщение находится в очереди',
- '101' => 'Сообщение передается оператору',
- '102' => 'Сообщение отправлено (в пути)',
- '103' => 'Сообщение доставлено',
- '104' => 'Не может быть доставлено: время жизни истекло',
- '105' => 'Не может быть доставлено: удалено оператором',
- '106' => 'Не может быть доставлено: сбой в телефоне',
- '107' => 'Не может быть доставлено: неизвестная причина',
- '108' => 'Не может быть доставлено: отклонено',
- '200' => 'Неправильный api_id',
- '210' => 'Используется GET, где необходимо использовать POST',
- '211' => 'Метод не найден',
- '220' => 'Сервис временно недоступен, попробуйте чуть позже',
- ),
- 'balance' => array(
- '100' => 'Запрос выполнен',
- '200' => 'Неправильный api_id',
- '210' => 'Используется GET, где необходимо использовать POST',
- '211' => 'Метод не найден',
- '220' => 'Сервис временно недоступен, попробуйте чуть позже.',
- ),
- 'limit' => array(
- '100' => 'Запрос выполнен',
- '200' => 'Неправильный api_id',
- '210' => 'Используется GET, где необходимо использовать POST',
- '211' => 'Метод не найден',
- '220' => 'Сервис временно недоступен, попробуйте чуть позже.',
- ),
- );
-
- /**
*
* Идентификатор api_id
* @param string $id
*/
- public function __construct($id)
- {
- $this->_apiId = $id;
- }
-
- /**
*
* @param string $to телефон: 11 знаков. например 79060000000
* @param string $text текст сообщение
* @param string $from отправитель
* @return string id сообщения
*/
- public function send($to,$text,$from=NULL)
- {
- $apiParams['api_id'] = $this->_apiId;
- $apiParams['to'] = $to;
- $apiParams['text'] = $text;
- if ($from)
- $apiParams['from'] = $from;
- $url = self::HOST.self::SEND.http_build_query($apiParams);;
- $body = file_get_contents($url);
- @list($code,$smsId) = explode("\n", $body);
- $this->_lastAction = 'send';
- $this->_responseCode = $code;
- return $smsId;
- }
-
- /**
*
* @param string $id id сообщения
* @return string код статуса сообщения.
*/
- public function status($id)
- {
- $apiParams['api_id'] = $this->_apiId;
- $apiParams['id'] = $id;
- $url = self::HOST.self::STATUS.http_build_query($apiParams);
- $body = file_get_contents($url);
- $status = $body;
- $this->_lastAction = 'status';
- $this->_responseCode = $status;
- return $status;
- }
-
- /**
*
* @return string Баланс в рублях
*/
- public function balance()
- {
- $apiParams['api_id'] = $this->_apiId;
- $url = self::HOST.self::BALANCE.http_build_query($apiParams);
- $body = file_get_contents($url);
- @list($code,$balance) = explode("\n", $body);
- $this->_lastAction = 'balance';
- $this->_responseCode = $code;
- return $balance;
- }
-
- /**
*
* @return int количество оставшихся сообщений
*/
- public function limit()
- {
- $apiParams['api_id'] = $this->_apiId;
- $url = self::HOST.self::LIMIT.http_build_query($apiParams);
- $body = file_get_contents($url);
- @list($code,$count,$limit) = explode("\n", $body);
- $this->_lastAction = 'limit';
- $this->_responseCode = $code;
- return (int)($count - $limit);
- }
-
-
- /**
*
* @return string код результата выполнения последней операции
*/
- public function getResponseCode()
- {
- return $this->_responseCode;
- }
-
- /**
*
* @return string расшифровка кода результата выполнения последней операции
*/
- public function getResponseMessage()
- {
- if ($this->_lastAction)
- return $this->_responseCodeTranstale[$this->_lastAction][$this->getResponseCode()];
- else
- return 'Нет данных для возврата сообщения';
- }
-
- }
-
Прошу пользоваться и давать советы по улучшению.
Вернуться в блогWarning: count(): Parameter must be an array or an object that implements Countable in /var/www/cramen.ru/library/Zend/Db/Table/Abstract.php on line 1259
Оставить комментарий