Pull to refresh

Отправляем SMS.ru с удобством

Reading time7 min
Views7K
Было дело, проскакивала на хабре статься о сервисе sms.ru
Попробовал, работает. Понравилось. Тогда на этом дело и закончилось.
Но вот недавно потребовалось мне сделать отправку SMS подписавшимся клиентам. API на сайте сервиса хорошо документирован и приведены примеры, но не хватает удобства использования. В результате написал небольшой класс для взаимодействия с sms.ru.



<?php

/**
* Класс взаимодействия с сервисом 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 'Нет данных для возврата сообщения';
  }

}

* This source code was highlighted with Source Code Highlighter.


Прошу пользоваться и давать советы по улучшению.
Tags:
Hubs:
+7
Comments14

Articles

Change theme settings