Skip to content

Instantly share code, notes, and snippets.

@maximzasorin
Last active May 10, 2017 11:31
Show Gist options
  • Select an option

  • Save maximzasorin/9703319667aa68d2843f08ffacec3896 to your computer and use it in GitHub Desktop.

Select an option

Save maximzasorin/9703319667aa68d2843f08ffacec3896 to your computer and use it in GitHub Desktop.
Компонент Yii 1 для работы с сервисом СмсДисконт
<?php
/**
* Компонент для работы с API сервиса СмсДисконт (iqsms.ru)
*
* @author Maxim Zasorin
*
*
* Установка:
* 1. Создаем директорию /protected/extensions/iqsms
* 2. Копируем в директорию этот файл.
* 3. В настройках указываем добавялем новый компонент со следующими настройками:
* 'iqsms' => array(
* 'class' => 'ext.iqsms.IqsmsComponent',
* 'login' => 'zXXXXXXXXXX',
* 'password' => 'XXXXXXXX',
* 'host' => 'json.gate.iqsms.ru',
* ),
*/
class IqsmsComponent extends CApplicationComponent
{
/**
* Логин.
*
* @var string
*/
public $login;
/**
* Пароль.
*
* @var string
*/
public $password;
/**
* Хост для отправки запросов.
*
* @var string
*/
public $host = 'json.gate.iqsms.ru';
/**
* Инициализация компонента
*
* @return void
*/
public function init()
{
if (!function_exists('curl_init')) {
throw new CException(\Yii::t('IqsmsComponent.extension', 'Отсутствует расширение cURL.'), 500);
}
parent::init();
}
/**
* Отправляет SMS-сообщение.
*
* @see https://iqsms.ru/api/api_json/#send
* @param array $messages
* @param string $statusQueueName
* @param string $scheduleTime
* @return array
*/
public function send($messages, $statusQueueName = null, $scheduleTime = null)
{
$params = array(
'messages' => $messages,
'statusQueueName' => $statusQueueName,
'scheduleTime' => $scheduleTime
);
$response = $this->makeRequest('send', $params);
return $response['messages'];
}
/**
* Возвращает статус сообщений.
*
* @see https://iqsms.ru/api/api_json/#status
* @param array $messages
* @return array
*/
public function getStatus($messages)
{
$response = $this->makeRequest('status', array(
'messages' => $messages
));
return $response['messages'];
}
/**
* Возвращает статус сообщений очереди.
*
* @see https://iqsms.ru/api/api_json/#statusQueue
* @param string $statusQueueName
* @param integer $statusQueueLimit
* @return StdClass
*/
public function getQueueStatus($statusQueueName, $statusQueueLimit)
{
$response = $this->makeRequest('statusQueue', array(
'statusQueueName' => $statusQueueName,
'statusQueueLimit' => $statusQueueLimit
));
return $response['messages'];
}
/**
* Возвращает баланс аккаунта.
*
* @see https://iqsms.ru/api/api_json/#credits
* @return float
*/
public function getBalance()
{
$response = $this->makeRequest('messages/v2/balance.json');
return $response['balance'][0]['balance'];
}
/**
* Возвращает баланс аккаунта.
*
* @see https://iqsms.ru/api/api_json/#credits
* @return float
*/
public function getCredit()
{
$response = $this->makeRequest('messages/v2/balance.json');
return $response['balance'][0]['credit'];
}
/**
* Возвращает список доступных имен для указания в качестве отправителя.
*
* @see https://iqsms.ru/api/api_json/#senders
* @return array
*/
public function getSenders()
{
$response = $this->makeRequest('senders');
return $response['senders'];
}
/**
* Выполняет запрос к API.
*
* @param string $resource
* @param array $params
* @return \StdClass
*/
protected function makeRequest($resource, $params = array())
{
// URL для запроса
$url = 'http://' . $this->host . '/' . $resource;
// Данные авторизации
$params['login'] = $this->login;
$params['password'] = $this->password;
// Отбрасываем пустые параметры
$params = array_filter($params);
// Выполняем запрос
$curl = curl_init($url);
curl_setopt_array($curl, array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HEADER => false,
CURLOPT_HTTPHEADER => array('Host: ' . $this->host),
CURLOPT_POSTFIELDS => json_encode($params),
));
$body = curl_exec($curl);
curl_close($curl);
// Обрабатываем ответ
$json = @json_decode($body, true);
if (!$json) {
throw new CException(\Yii::t('IqsmsComponent.extension', 'Некорректный ответ сервера.'));
}
if (!isset($json['status']) || $json['status'] != 'ok') {
throw new CException(\Yii::t('IqsmsComponent.extension', 'Ошибка в запросе'));
}
return $json;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment