Отправляем SMS с сайта на PHP
Меня уже давно занимает одна задача — отправка SMS через Интернет. Конечно, скажите Вы, это можно сделать с сайта оператора, но, во-первых, там везде стоит CAPTCHA, так что автоматически отправлять sms не получится, а во-вторых, оператор вставляет в текст SMS свою рекламу и мой IP-адрес. Мне же хотелось бы сделать отправку SMS со своего сайта, в полностью автоматическом режиме — чтобы можно было, скажем, рассылать SMS-сообщения подписчикам, либо даже себе в случае каких-либо событий. Для этого, скажите Вы, тоже есть специальные сервисы, которые еще и номер отправителя подменять умеют. Но дело в том, что все эти сервисы платные, что вполне нормально, если я использую отправку SMS в бизнес-целях, но не подходит, если я на этом не зарабатываю денег.
И вот, наконец, задача решена! Наконец, появился сервис, который позволит автоматически бесплатно отправлять со своего сайта SMS-сообщения на любой номер.
Так вот, не далее, как пару дней назад, наткнулся я на программу Radar. Первое и главное назначение программы, по мнению ее разработчиков — позиционирование пользователя по IP-адресу и близлежащим WiFi-точкам доступа, но умеет программа и отправлять SMS-сообщения. SMS отправляются на номера любого оператора, без всяких CAPTCHA и, главное, совершенно бесплатно. Единственное ограничение — SMS можно отправлять не чаще, чем раз в 5 минут, но мы же не спамеры какие-нибудь, нам этого вполне достаточно.
Приложение отправляет SMS через Интернет, а значит, зная протокол взаимодействия, можно написать свое приложение, которое тоже будет отправлять сообщения через Интернет. Протокол на сайте программы не описан, но используя Wireshark, восстановить его не составляет труда.
Результатом моих изысканий стал класс на языке PHP. О простоте используемого протокола свидетельствует размер класса, вместе с комментариями на превышающий 300 строк кода. Если в кратце, то для отправки данных на сервер используются обыкновенные HTTP-запросы методом POST, а результат сервер возвращает в виде XML-документа. Для отправки SMS-сообщения достаточно выполнить всего два запроса: первый — для авторизации на сервера, а второй — собственно, отправка SMS.
Конечно, для того, чтобы отправлять SMS, надо для начала зарегистрироваться на сайте http://altergeo.ru/, скачать программу «Yason» и через ее подтвердить номер своего мобильного телефона, который будет использован в качестве номера отправителя SMS-сообщений.
Итак, перейдем, наконец, к кодированию. Для работы с сетью я использовал функции cURL, как самое простое, но одновременно, функциональное средство.
Авторизация выглядит так:
//инициализация библиотеки
$ch = curl_init();
//подготавливаем запрос на сервер
curl_setopt_array(
$ch,
array(
//для авторизации нужно отправить запрос методом POST на этот URL
CURLOPT_URL => 'http://altergeo.ru/apiauth/',
CURLOPT_POST => true,
//такие параметры нужно передать серверу
CURLOPT_POSTFIELDS => 'version=2&login='.$username.'&'.
'pwd='.md5($pass),
//это для того, чтобы получить ответ сервера в строку
CURLOPT_RETURNTRANSFER => true
)
);
//выполняем запрос
$answ = curl_exec($ch);
После выполнения этого кода, мы получим в переменной $answ ответ сервера. Это будет XML-документ типа такого:
0 9563214af874ac0a16eb6521bed8920e 79257521234 75213 username@email.ru Alexander Smith Alexander Smith 1987-01-01 m Это строка статуса на сайте Altergeo
Главное в этом XML — содержимое тега <skey>. Это идентификатор сессии, который понадобится нам, когда мы будем отправлять SMS. Чтобы получить это значение, используем SimpleXML:
$xml = new SimpleXMLElement($answ);
Далее, приступаем, непосредственно, к отправке SMS-сообщения:
curl_setopt_array(
$ch,
array(
//URL для отправки сообщений уже другой
CURLOPT_URL => 'http://altergeo.ru/apisms',
CURLOPT_POST => true,
//строка параметров POST для отправки SMS
CURLOPT_POSTFIELDS => 'app_type=4&os_type=4&'.
'session_key='.$xml->skey.'&'.
'receipient_number='.$number.'&'.
'text='.$sms_message.'&act=sendsms',
CURLOPT_RETURNTRANSFER => true
)
);
Далее продолжать не имеет смысла, так как все остальное очень просто. А ниже Вы можете скачать конечный результат:
- класс yasms на PHP yasms-2.1.zip (в архиве сам класс и пример использования).
Пример использования класса yasms:
require_once 'yasms.class.php';
$sms = new yasms('myemail@mail.ru', 'password_qwerty');
$sms->lang = 'ru';
$sms->send('+79207495002', 'Моя СМС-ка!');
echo $sms->status;
Ваша работа вызывает интерес.
Правильно ли я Вас поняла:
для того, чтобы отправлять смс со своего сайта, достаточно:
– воспользоваться созданным Вами классом yasms.php,
– установить программу Yason?
Людмила,
Да, абсолютно правильно.
В будущем, возможно, реализую и подтверждение номера, так что дополнительного ПО устанавливать не потребуется.
А это законно?
Тут фишка в том, что поймать пользователя этого сервиса, поставившего спам на поток задача не особо сложная. Весь wi2geo.ru именно об том чтобы находить людей.
А для частных целей сервис очень даже подходит.
Павел,
Ага, даже слишком простая задача. Ведь там еще и номер телефона надо подтверждать. Через какое-то время просто позвонят) если на поток поставить.
Спам при помощи этого средства отправлять не получится. Во-первых, всего одно сообщение раз в пять минут. Во-вторых, во всех СМС-сообщениях будет указан Ваш номер, так что если владельцы сервиса Вас не забанят, то один из недовольных «спамополучателей» Вас таки вычислит, и тут уже Вам придется беспокоиться о законности его действий ;)
Что касается законности вот такого использования сервиса, то это надо «перетереть» с администрацией Wi2Geo. Буду решать этот вопрос с ними.
Кстати, класс обновился, так что рекомендовал бы заново его скачать. Теперь программа Yason не нужна — все необходимые действия по подтверждению номера можно выполнить при помощи класса yasms.
Возможно ли подключить созданный Вами класс к форуму phpbb? Если да, то каким образом?
Людмила,
Что Вы подразумеваете под словом «подключить»? Конечно, можно внести в код phpBB изменения, чтобы, допустим, когда кто-то входит в панель администрирования, Вам отправлялось СМС.
Что касается вопроса, «каким образом», то вместе с классом в архиве лежит пример использования. Кроме того, если Вы откроете код класса, то увидите, что он подробно задокументирован.
Если есть конкретные вопросы (конкретные – это вот такие: «я делаю вот так: код примера, а мне выдает ошибку: текст ошибки»), я с радостью на них отвечу прямо здесь. Если же конкретных вопросов нет, то на сайте указан адрес форума, где можно поговорить более свободно.
спасибо за информацию. по коду возник вопрос
не знаю пхп, но вроде получается, что ваш пхп скрипт передает пароль как обычный текст. а wireshark показывает, что Ясон передает его в MD5 шифре. может я чего-то не понимаю?)
пароль простым текстом не подходит, выдает ошибку авторизации. а в MD5 всё гут.
и еще. ясон не передает UA
Мой скрипт точно так же передает пароль в md5. В статье даны отрывки кода, в которые не вошло преобразование.
Спасибо за замечание, статью подправил.
Хм, а я как-то не обратил внимание. Спасибо, уже исправляю.
Штука очень интересная, захотелось иметь у себя))
Я просто скопировал ваш скрипт в директори. Я что-то не учёл?
Parse error: syntax error, unexpected T_CONST, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or ‘}’ in …/yasms/yasms.class.php on line 69
Константин,
Такая ошибка может возникать, если у Вас установлен PHP 4. Для скрипта необходим PHP 5.
К сожлению, не видел ранее системных требований для скрипта. Хостер действительно предоставляет PHP 4.4.7. Извините за беспокойство))
Константин,
Не надо извиняться – это мой косяк, так как я не указал на сайте системные требования, хотя надо это делать.
Иван:
«А это законно?»
Получен ответ от администрации Wi2Geo. Вы можете спокойно использовать класс yasms в своих приложениях, при условии, что Wi2Geo будет указан провайдером сервиса отправки СМС.
Жаль что ограничение поставили…(
Спасибо огромное)) Давно заморачивался, как сделать для себя решение для смс уведомлений о падении сервера и других критических проблемах ))
Здравствуйте. объясните пожалуйста как можно использовать ваше творение на сайте под WordPress? возможно ли организовать отправку rss новостей по смс?
Ну напишете соответствующий плагин – можно будет. А пока это лишь PHP-класс, который Вы можете использовать, как хотите.
Написал программу для symbian используя частично ваш класс, спасибо.
Хотелось бы спросить вот теперь по поводу ограничения на число смс, сколько смс и за какой период не кто не исследовал этот вопрос?
Точно пока никто не знает. Вроде бы, есть ограничение на количество СМС-сообщений в день.
А сервис еще работает. Зарегистрировался на сайте, потвердил свой номер, а при отправки смс выходит ошибка «Все СМС израсходованы». Вопрос как их пополнить? Или сами должны пополняться через определеное время?
@Михаил
А сервис еще работает. Хотел написать А сервис еще работает?
Сервис работает. По крайней мере, я до сих пор отправляю СМС со своего аккаунта. Честно говоря, не знаю, как пополнять, раньше такого не было. Буду проверять, спасибо за комментарий.
@Kolonist
Ну так как результаты проверки?
@Михаил
Никак. На один и тот же номер нельзя зарегистрироваться несколько раз. А другого у меня нет.
@Kolonist
Спасибо и на этом ))) Буду искать тогда другой способ, раз этот для новый пользователей не доступен.
Единственное, позже попробую глянуть на предмет изменений в протоколе. Хотя раз СМС отправляются, то врядли в этом дело.
@Kolonist
Я думаю скорее всего изменились правила на сайте, что бы новички не спапили и на их сайте регились не ради отправки смс.