Last active
May 10, 2017 11:31
-
-
Save maximzasorin/9703319667aa68d2843f08ffacec3896 to your computer and use it in GitHub Desktop.
Компонент Yii 1 для работы с сервисом СмсДисконт
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <?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