Здесь будет краткое руководство как пользоваться их API. В свое время нужно было привязать отправку и получение смс к своему программному обеспечению. Каждый раз лазить в вебморду смс сервера от GoIP и проверять вх./исх. сообщения было неудобно.
API сервера
Для отправки смс используется API
http://192.168.1.35/goip/en/dosend.php?USERNAME=root&PASSWORD=root&smsprovider=1&smsnum=13800138000&method=2&Memo=hello
Бывает, что сообщение не уходит, тогда нужно его отправить повторно
http://192.168.1.35/goip/en/resend.php?messageid=уникальный_номер_смс_сообщения_в_бд&USERNAME=root&PASSWORD=root'
Вот пример методов класса для отправки смс сообщения
public function send() { // Номер телефона на который нужно отправить сообщение. // Формат номера 10 значный номер (XXX-XXX-XX-XX) без 8, +7 // $smsnum = '9658795588'; // Получаем номер телефона с клиента $smsnum = substr($_POST['phone'],2,10); // Код сотового оператора $code = substr($smsnum,0,3); $regexp = '/9[0,1,2,3,5,6,7,9][0,1,2,3,4,5,6,7,8,9]/'; // Проверяем Коды сотовых операторов if( !preg_match($regexp, $code)) { return 'Ошибка. Номер телефона неверный.'; } // Само сообщение // $msg = 'тест'; // $msg = mb_substr(trim($_POST['smsText']),0,335,'UTF-8'); $msg = trim($_POST['smsText']); // Массив или объект содержащий свойства $arr = array('Memo' => $msg); // Генерирует URL-кодированную строку запроса $msg = http_build_query($arr); // MTC 910, 915, 916, 917, 919, 985, 986 $regexp = '/910|915|916|917|919|985|986|/'; // Сообщения на номера МТС отправляем со второй группы линии, // остальные с первой группы if(preg_match($regexp, $code)) { $smsprovider = 2; } else { $smsprovider = 1; } // С помощью такого Url мы отправляем сообщение на смс сервер GoIp $url = 'http://192.168.1.35/goip/en/' .'dosend.php?USERNAME=root&PASSWORD=root&smsprovider='.$smsprovider .'&smsnum='.$smsnum.'&method=2&'.$msg; // Читает содержимое файла в строку, в нашем случае мы должны получить messageid $get = file_get_contents($url); //echo htmlspecialchars($get); // Убираем пробелы, иначе функция preg_match не может найти подстроку $str = str_replace(" ","",$get); // Шаблон для поиска $reg = '/resend.php\?messageid=(.*?).*USERNAME=root.*PASSWORD=root/'; // Результат пишет в массив preg_match($reg, $str, $matches); $url = 'http://192.168.1.35/goip/en/'.$matches[0]; //Делаем Get запрос чтобы смс сообщение было отправлено file($url); return $res = 1; } public function resend() { // Номер сообщения которое нужно переотправить $msgid = (int) $_POST['msgid']; $url = 'http://192.168.1.35/goip/en/resend.php?messageid='.$msgid .'&USERNAME=root&PASSWORD=root'; // Делаем Get запрос чтобы смс сообщение было отправлено file($url); return $res = 1; }
Данные по исх./вх. сообщениям хранятся в таблицах receive и sends
// Запрос на получение всей истории переписки по заданному номеру $query = "(SELECT 'in' AS route,time,goipname,msg,0 AS msgid," ."CHAR_LENGTH(msg) AS msg_length,'0' AS over" ." FROM `receive` WHERE `srcnum`='".$srcnum."')" ." UNION " ."(SELECT 'out' AS route,T2.time,T3.name AS goipname,T2.msg,"; ."T1.messageid AS msgid," ."CHAR_LENGTH(T2.msg) AS msg_length,T1.over" ." FROM `sends` AS T1" ." INNER JOIN message AS T2 ON T1.messageid=T2.id" ." INNER JOIN goip AS T3 ON (T2.goipid=T3.id OR T1.goipid=T3.id)" ." WHERE telnum='".$srcnum."')" ." ORDER BY time";
Готовых примеров применения вышеописанных кодов уже не осталось. Года 2 тому назад был изучен обмен данными между родным смс сервером и самим шлюзом GoIP. На основании полученных данных написал собственный смс-сервер. Плюсом стало, что можно отслеживать статус доставки смс сообщения. Но там есть нюанс, что статус доставки смс сообщения отразится, если телефон включен в момент отправки. Если номер включат позже на несколько часов или дней, то статус доставки не увидим, хотя само сообщение будет доставлено. А в остальном только плюсы.
Если есть опыт работы с wireshark, то можно проследить следующий алгоритм общения между GoIP и родным смс сервером. Далее несложно написать свой собственный смс сервер.
1.BulkSMSRequest 2.BulkSMSConfirm/BulkSMSReject 3.AuthenticationRequest 5.SubmitNumberRequest 1 4.AuthenticationConfirm 6.SubmitNumberStatus 1 7.SubmitNumberRequest 2 8.SubmitNumberStatus 2 … 9.EndRequest 10.EndConfirm
Сам код проекта с примерами выложить в краткой форме не получится. Слишком много данных, и все это привязано к другому проекту. В ближайшее время планирую запустить тестовую версию смс сервера на PHP, скоро выложу ссылку на проект.
ссылка на оригинал статьи https://habr.com/ru/post/507460/
Добавить комментарий