Пример реализации протокола работы с СМС-шлюзом на PHP
Функция отправки сообщения
// функция передачи сообщения
function sendSMS($login, $password, $phone, $text, $sender)
{
$host = "api.infosmska.ru";
$fp = fsockopen($host, 80);
fwrite($fp, "GET /interfaces/SendMessages.ashx" .
"?login=" . rawurlencode($login) .
"&pwd=" . rawurlencode($password) .
"&phones=" . rawurlencode($phone) .
"&message=" . rawurlencode($text) .
"&sender=" . rawurlencode($sender) .
" HTTP/1.1\r\nHost: $host\r\nConnection: Close\r\n\r\n");
fwrite($fp, "Host: " . $host . "\r\n");
fwrite($fp, "\n");
while(!feof($fp)) {
$response .= fread($fp, 1);
}
fclose($fp);
list($other, $responseBody) = explode("\r\n\r\n", $response, 2);
list($other, $ids_str) = explode(":", $responseBody, 2);
list($sms_id, $other) = explode(";", $ids_str, 2);
return $sms_id;
}
Входные параметры:
- $login - логин
- $pasword - пароль
- $phone - телефон адресата в формате 7xxxxxxxxxx
- $text - текст сообщения
- $sender - имя отправителя. чувствительно к регистру. по умолчанию можно передавать SMS. Чтобы завести своё имя отправителя, зайдите в создание рассылки в личном кабинете и используйте кнопку "создать/удалить" в поле "адрес отправителя".
Функция ставит сообщение в очередь на отправку и возвращает идентификатор сообщения. В дальнейшем этот идентификатор можно использовать для получения статуса сообщения.
Пример использования данной функции:
// отправляем смс
$sms_id = sendSMS("login", "password", "71111111111", "Тестовое сообщение", "SMS");
Если вместо русских букв приходят знаки вопроса, необходимо перевести оптравляемый текст в кодировку utf-8.
// отправляем смс
$sms_id = sendSMS("login", "password", "71111111111", iconv("windows-1251", "utf-8", "Тестовое сообщение"), "SMS");
Функция получения статуса сообщения
// функция чтения статуса сообщения
function getSMSstatus($login, $password, $sms_id)
{
$host = "api.infosmska.ru";
$fp = fsockopen($host, 80);
fwrite($fp, "GET /interfaces/GetMessagesState.ashx" .
"?login=" . rawurlencode($login) .
"&pwd=" . rawurlencode($password) .
"&ids=" . rawurlencode($sms_id) .
" HTTP/1.1\r\nHost: $host\r\nConnection: Close\r\n\r\n");
fwrite($fp, "Host: " . $host . "\r\n");
fwrite($fp, "\n");
while(!feof($fp)) {
$response .= fread($fp, 1);
}
fclose($fp);
list($other, $responseBody) = explode("\r\n\r\n", $response, 2);
list($other, $ids_str) = explode(":", $responseBody, 2);
list($sms_status, $other) = explode(";", $ids_str, 2);
return $sms_status;
}
Входные параметры:
- $login - логин
- $pasword - пароль
- $sms_id - идентификатор сообщения полученный при отправки
Функция возвращает статус сообщения.
Пример использования данной функции:
// отправляем смс
$sms_id = sendSMS("login", "password", "71111111111", "Тестовое сообщение", "SMS");
// получаем статус
$sms_status = getSMSstatus("login", "password", $sms_id);
Полное описание HTTP протокла взаимодействия с SMS шлюзом