СМС-команды и публикация СМС на сайтах

Технические Добавить комментарий

Смс можно использовать по разному, и как частный пример - отдавать команды на запуск программ. А программы могут выполнять любые функции - например, запуск каких-то процедур, которые невозможно запланировать по cron-у (”задачнику”). А так - отправили на номер смс сервера секретную команду и программа смс-сервера запустила соответствующую программу.

И как еще один частный пример - передача смс сообщений на свой сайт для дальнейшей обработки. Это может быть какое-то голосование, опрос или просто “фишка” для посетителей сайта. Пример Вы можете наблюдать на сайте ProfiSMS.ru - посетитель сайта может отправить смс на номер смс-сервера, указав в начале текса смс код команды (например *555*). Делается это очень просто, объясню на примере именно сайта ProfiSMS.ru :
1) программа Сервер ProfiSMS получает такую “командную” смску, “разбирает ее”
2) и видя код *555* запускает программу, которая передает данные (текст смс, дату отправки, номер отправителя) в Интернет, а именно php-скрипту на сайте ProfiSMS.ru

Единственное надо понимать, что компьютер на котором работает программа Сервер ProfiSMS должен быть включен, чтобы программа работала. И этот компьютер должен иметь выход в Интернет, чтобы уже программа передачи данных в Интернет могла передать эти данные.

Т.о. можно легко расширить возможности программы Сервер ProfiSMS и автоматизировать некоторые процессы, которые до этого требовали непосредственного присутствия.

И чтобы Вам легче было сообразить как это все, разберем детально пример с публикацией смс на сайте. В программу установки ProfiSMS входит и упоминаемая выше программка передачи данных на сайт в интернет. Она называется put2site и находится в подкаталоге psmserver\ext\ . Там же расположен и файл настроек этой программки, в котором Вы можете задать адрес Вашего сайта и имя php-скрипта (программа на стороне сервера, которая обрабатывает принятые данные).

Запустите программу  Сервер ProfiSMS и перейдите на вкладку “Команды по СМС” :

смс на сайт

Здесь Вы видите, что мы задали условие - получив смс, в начале которого текст *555* будет запущена программа put2site.exe, которая находится в подкаталоге ext. Буковки “DS N TS” означают, что программа Сервер ProfiSMS передаст программе put2site параметры:
N - номер отправителя
DS - дата-время отправки смс (всегда передается в формате ДД.ММ.ГГГГ чч:мм:сс - 09.04.2009 04:50:07)
TS - текст смс (текст команды вырезается автоматически)
Неважно в каком порядке Вы укажете эти параметры - программе они передаются вначале Номер отправителя, потом Дата-Время отправки, и потом текст смс.

Смс-сервер далее спокойно продолжает свою работу, а запущенная им программа put2site - выполняет то, что положено выполнять ей. Т.е. put2site вызывает скрипт на сервере в Интернет и передает ему через GET три параметра - номер отправителя, дату-время отправки смс и текст смс.

Адрес сервера и имя скрипта настраивается через одноименный ini-файл (put2site.ini). Важно заметить, что Вы можете переименовать программу put2site как угодно, и она всегда будет искать одноименный ini-файл. Можно было и адрес сайта и имя скрипта передать через командную строчку, но в целях экономии места в командной строке я вынес это в ini-файл. Содержимое ini-файла выглядит так:

[Site]
; адрес Вашего сайта yoursire.ru
siteadr=yoursire.ru

; имя Вашего скрипта,относительно главного каталога сайта.
; рекомендуется размещать свой скрипт в отдельный каталог с секретным названием
adrscript=secrdir/yourscript.php

; т.е. полный адрес скрипта будет таким: http://yoursire.ru/secrdir/yourscript.php

Собственно с этим все должно быть понятно. Ну а сам скрипт выполняет у меня простое действие - вносит получаемые данные в таблицу БД. И как Вы заметили, сайт выполнен на движке WordPress и эта публикация смс легко вписалась в общий дизайн сайта.

И просто для иллюстрации, вот основной код php-скрипта:

$restext=’1′;
if((isset($_GET['a1']))&&(isset($_GET['a2']))&&(isset($_GET['a3'])))
{

@include_once(”sms2siteproc.php”);
$nomer=trim($_GET['a1']);
$dtsend=trim($_GET['a2']);
$txtmsg=trim($_GET['a3']);

// вызов функции отправки емайл-уведомления о новой смс
newSMS2Site($nomer,$dtsend,$txtmsg);

// это мы немного прячем номер отправителя
if (strlen($nomer)>6) {$nomer=substr_replace($nomer,’***’,strlen($nomer)-3); };

$restext=’2′;
if((strlen($nomer)>1)AND(strlen($dtsend)>18)AND(strlen($txtmsg)>0))
{
$restext=’0′;
if($dbh=db_open()){
$sql1=”INSERT INTO sms2site(nom,dtsend,txtmsg) VALUES (”;
$sql1=$sql1.”‘”.$nomer.”‘,STR_TO_DATE(’”.$dtsend.”‘,’%d.%m.%Y %H:%i:%s’), ‘”.mysql_escape_string($txtmsg).”‘)”;

if (!$sth=mysql_query($sql1)){
$restext=’3 ‘.$sql1;
};
};
};

}
echo $restext;

function newSMS2Site($nomer,$dtsend,$txtmsg){
$msgm=”Новая смс на сайте!\n\n”;
$msgm=$msgm.”Номер:               “.$nomer.”\n”;
$msgm=$msgm.”Дата-время отправки: “.$dtsend.”\n”;
$msgm=$msgm.”Текст сообщения:\n———————-\n”;
$msgm=$msgm.$txtmsg;
$msgm=$msgm.”\n———————-\n”;

MailmsgRU($msgm,”support@profisms.ru”,”support@rateam.biz”,”New sms to site!”);
}

А это основной код самой программы put2site :

procedure tophp(adrsite,adrscript,parstr:string);
var IdHTTP1: TIdHTTP;
StrResult:string;
begin
StrResult:=”;
IdHTTP1:=TIdHTTP.Create(nil);

IdHTTP1.ProxyParams.ProxyPort:=0;
IdHTTP1.ProxyParams.ProxyServer:=”;
IdHTTP1.ProxyParams.BasicAuthentication:=false;
IdHTTP1.ProxyParams.ProxyUsername:=”;
IdHTTP1.ProxyParams.ProxyPassword:=”;

IdHTTP1.HandleRedirects:=True;
IdHTTP1.Host:=adrsite;
IdHTTP1.Port:=80;
IdHTTP1.RecvBufferSize:=32768;
IdHTTP1.ReadTimeout:=5000;
IdHTTP1.Request.UserAgent:=’Mozilla/5.0 (compatible; ProfiSMS.ru)’;
IdHTTP1.ProtocolVersion:=pv1_0;
try
StrResult:=IdHTTP1.Get(adrsite+’/'+adrscript+’?'+parstr);
except
end;
IdHTTP1.Destroy;
writeln(StrResult);
end;

begin
adrsite:=”; parstr:=”; adrscript:=”;

if ParamCount >0 then
begin
NameINI:=Application.ExeName;
delete(NameINI,length(NameINI)-length(ExtractFileExt(NameINI))+1,100);
loadini(NameINI+’.ini’);

for i:=1 to ParamCount do
if pos(’N=’,UpperCase(ParamStr(i)))=1 then
begin  nomer:=copy(ParamStr(i),3,length(ParamStr(i))-2);
end else
if pos(’DS=’,UpperCase(ParamStr(i)))=1 then
begin  ds:=copy(ParamStr(i),4,length(ParamStr(i))-3);
end else
if pos(’TS=’,UpperCase(ParamStr(i)))=1 then
begin  msgtxt:=copy(ParamStr(i),4,length(ParamStr(i))-3);
end;
end;

if pos(’http://’,adrsite)=0 then adrsite:=’http://’+adrsite;
parstr:=parstr+’a1=’+UrlEncode(nomer)+’&a2=’+UrlEncode(ds)+’&a3=’+UrlEncode(msgtxt);
if (length(adrsite)*length(parstr)*length(adrscript)>0) then tophp(adrsite,adrscript,parstr);
end.

Этих кусков исходников достаточно, чтобы по-быстрому написать и свою программу передачи данных в Интернет и скрипт приема этих данных на сайт.

8 коммент. to “СМС-команды и публикация СМС на сайтах”

  1. Андрей Says:

    Доброе утро! Вчера проводил тестирование вашей программы. Произвел все настройки для приема смс на сайт. все работает только одна проблема, все данные в базу вносятся но при выводе на сайт почемуто отображаются иероглифы! Страницы сайта в кодировке utf8, а в базе стоит сравнение 1252 general_ci!!!! Подскажите пожалуста как можно решить проблему????? заранее спасибо!!!

  2. Андрей Says:

    извеняюсь в базе стоит 1251 general_ci в предыдущем коменте ошибся!!!

  3. Андрей Says:

    Что никто не может ничего подсказать по моему предыдущему вопросу??????

  4. Разработчик Says:

    Андрей - я быстрее отвечаю на емайл :)
    Любую перекодировку можно делать в самом php-скрипте… Так, стойте. О какой базе вообще идет речь? О базе на Вашем сайте? Сам сайт у Вас на каком движке? Вы как-то конкретнее напишите.

  5. Александр Says:

    У меня что то не получается, можно полный php скрипт?

  6. Разработчик Says:

    Александр, отправил на емайл. В письме пояснил что и зачем.
    P.S. продублировал на “85″

  7. lordrus Says:

    А можно реализовать наоборот?
    чтоб скрипт с сайта отправлял смс

  8. Разработчик Says:

    можно :)

Есть вопрос, предложение? Напишите его прямо сейчас!

.
Подписка на новости по RSS Вход