Ошибка: Failed to parse the Currency Converter XML document.
$1 264.32


Ошибка: Failed to parse the Currency Converter XML document.
$23 935.38


Ошибка: Failed to parse the Currency Converter XML document.
$1 763.68


Отправка SMS при помощи Delphi

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

Отправку sms сообщения рассмотрим на примере оператора сотовой связи «Ульяновск- gsm », позволяющего производить отправку sms сообщений через web- страничку по адресу:

http://sms.smarts-gsm.ru/sms.cgi
Для отправки sms сообщения нужно заполнить поля формы:
в поле «Кому» ввести полный телефонный номер, например 78422973421 .


В поле «Что» вводится текст сообщения.

В списке «Формат» выбирается тип сообщения.

Отправка сообщения инициализируется кнопкой «s end».

Передаваемая строка на сервер оператора сотовой связи, при заполненном поле «Кому» — 78422973421, полем «Что» — « sms », в формате «Обычный sms » выглядит следующим образом:

to=78422973421&msg=sms&dcs=0 (1)

Разберемся откуда берется эта строка и что она означает. Если рассмотреть html код страницы, то видим следующую картину:


< form method=post action=«http://sms.smarts-gsm.ru/sms.cgi»>
< input type=text name=to value=«» size=15>[номер абонента]
< textarea name=msg cols=30 rows=5> < / textarea
< select name=dcs>
< option value=0>Обычный sms
< option value=24 >flash sms
< option value=200 >Индикация голосового сообщения (Вкл.)
< option value=192 >Индикация голосового сообщения (Выкл.)
< option value=201 >Иидикация наличия факса (Вкл.)
< option value=193 >Иидикация наличия факса (Вкл.)
< option value=202 >Индикация сообщения e-mail ( Вкл. )
< option value=194 >Индикация сообщения e-mail ( Выкл. )
< input type=reset value=«clean»>
< input type=submit value=«s end >>»>
< / form

Очевидно, что это форма со следующими компонентами :

1) поле для ввода текста с именем to , куда вводится номер абонента
2) элемент ввода текста с именем msg , куда вводится текст сообщения
3) выпадающее меню с именем dcs , где выбирается тип сообщения
4) кнопка « clean » для очистки формы от текстовой информации
5) кнопка «s end >>» для отправки содержимого формы на сервер

Таким образом, строка вида (1) образуется при отправке содержимого формы методом post на cgi шлюз по адресу http://sms.smarts-gsm.ru/sms.cgi

Делаем вывод, что нужно при помощи delphi сформировать такую же строку и отослать ее на сервер оператора сотовой связи. Отправку строки будем производить методом navigate2 компонента t webbrowser .

Спецификация метода следующая :

procedure navigate2( var url: olevariant; var flags: olevariant; var targetframename: olevariant; var postdata: olevariant; var headers: olevariant); overload;

Описание: метод используется при навигации и закачки специфичных ресурсов. Может отсылать НТТР сообщения на специфичные адреса url и показывать при этом результаты выполнения этого метода.

Параметры:
var url: olevariant — переменная типа olevariant, содержащая указатель на локальный файл или ресурс в сети Интернет.
var flags: olevariant — переменная типа olevariant, может принимать одно из нескольких возможных значений:

Константа Значение Описание
navopeninnewwindow 1 - открывать файл или url в новом окне
navnohistory 2 - не добавлять файл в лист history. Новая страница заменяет имеющуюся страницу в кэше.
navnoreadfromcache 4 - Не читать страницу из кэша.
navnowritetocache 8 - Не записывать результат навигации в кэш.
navallowautosearch 16 - Если навигация не удалась, разрешить броузеру искать ресурсы с таким же названием, но с именем домена (com, .edu, и т.д.)

var targetframename: olevariant — имя фрейма в ресурсе, который должен быть отображен, или null если таковой не может отображаться в указанном url.
var postdata: olevariant — содержит данные, пересылаемые серверу. Используется для генерации post метода. Если значение переменной null , то генерируется метод get. Данные, содержащиеся в postdata
игнорируются, если url по которому производится навигация, не http типа.
var headers: olevariant — содержит НТТР заголовок передаваемых данных

Создадим форму в delphi из необходимых для заполнения строки вида (1) компонентов. Добавляем также компонент twebbrowser и делаем его невидимым из эстетических соображений.

Номер телефона должен заноситься в компонент combobox1 , а текст сообщения в memo1. Обработчик кнопки «Отправить», будет выглядеть следующим образом:

var
vwebaddr, vpostdata, vflags, vframe, vheaders: olevariant;
iloop: integer;
text,stpostdata: string;
begin
text:=memo1.text;
stpostdata:=«to=»+combobox1.text+«&msg=»+text+«&dcs=0»;
vheaders:= «content-type:application/x-www- form-urlencoded»+ #10#13#0;
vpostdata:= vararraycreate([0, length(stpostdata)], varbyte);
for iloop := 0 to length(stpostdata) — 1 do
begin
vpostdata[iloop]:= ord(stpostdata[iloop+1]);
end;
vpostdata[length(stpostdata)]:= 0;
tvardata(vpostdata).vtype:= vararray;
vwebaddr:=«http://sms.smarts-gsm.ru/sms.cgi»;
vflags:=navnowritetocache;
vframe:=emptyparam;
try
webbrowser1.navigate2(vwebaddr,vflags,vframe,vpostdata,vheaders);
except
end;

Разберем код построчно.

stpostdata:=«to=»+combobox1.text+«&msg=»+text+«&dcs=0»;

заполняем строковую переменную stpostdata значениями полей. Отправляем обычный sms, поэтому dcs=0, исходя из значений в html форме

< option value=0>Обычный sms

vheaders:= «content-type:application/x-www- form-urlencoded»+ #10#13#0;

здесь создаем http заголовок в виде нуль-терминальной строки( оканчивающейся на #0 );

vpostdata:= vararraycreate([0, length(stpostdata)], varbyte);

здесь, для заполнения передаваемых данных создаем вариантный массив с минимальным пределом равным 0 и максимальным, равного длине строки length(stpostdata) типа varbyte ( 8-ми битовое беззнаковое целочисленное значение (тип byte ) )

for iloop := 0 to length(stpostdata) — 1 do
begin
vpostdata[iloop]:= ord(stpostdata[iloop+1]);
end;

здесь посимвольно заполняем вариантный массив значениями нашей строки

vpostdata[length(stpostdata)]:= 0;

обнуляем последний элемент

tvardata(vpostdata).vtype:= vararray;

В поле vtype помещается признак типа данных. Присваиваем вариантной структуре данных тип vararray, что означает «Вариантный массив». Данная операция необходимо для того, чтобы массив данных был вариантного типа. Если данную операцию не производить, то массив, хотя и будет состоять из значений типа variant , не будет вариантного типа. Далее

vflags:=navnowritetocache;

ставим флаг «не записывать в кэш».

Затем, используя метод navigate2 , отправляем заполненные структуры данных на известный нам адрес, предусмотрев обработку ошибки.

Подводные камни

1) Абонент может получить sms сообщение в другой кодировке. Это объясняется тем, что в шлюзе производится обработка принимаемого сообщения только в какой-либо одной кодировке. Все зависит от конкретной реализации cgi шлюза. В любом случае кодировка подбирается экспериментальным путем.

2) Результат отправки сообщения появляется в новой странице, к примеру «Сообщение отправлено успешно», после того, как сервер принимает сообщение и генерирует при помощи шлюза новую страницу. Так что узнать, корректно ли принял sms сообщение сервер, можно при анализе новой страницы, появляющейся в браузере.

 

Интересное

Диски, разделы, буквы...
Вот, не кажется мне MS Windows такой дружественной, как утверждают её пользователи. Ничего удивительного, впрочем: сам я её пользователем практически не являюсь, и сталкиваюсь с ней...
Подробнее...
Эволюция 3D-графики в...
Воспроизведение видео и трехмерные игры — очень ресурсоемкие задачи для мобильного телефона, поэтому до недавнего времени они были трудно реализуемы. Но прогресс не стоит на месте, и в портативных...
Подробнее...
Модемы: Команды AT
Введение в АТ-командыТехнически модем представляет собой своего рода компьютер, содержащий микропроцессор, постоянное запоминающее устройство и тому подобное. Надо заметить, что по...
Подробнее...
Дата по русски
Скрипт, который мы сейчас рассмотрим, позволяет вывести на экранпосетителя дату в формате русского языка. Сразу предупреждаю,что реализация алгоритма этой задачи не самая лучшая.Но –...
Подробнее...
О политике защиты...
Если вы работаете в той же сфере, что и я, то наверняка должны выполнять различные требования по информационной безопасности. В зависимости от вида деятельности, такие требования могут быть...
Подробнее...
Оптимальный выбор ключевых...
Очень часто при заказе услуги «Продвижение сайта» клиенты требуют вывод сайта в ТОП по определенным поисковым запросам, которые сами же и сообщают. Фирмы-оптимизаторы не отказываются от условий...
Подробнее...
Корпоративный интернет-счётчик
В данной статье рассказывается как создать интернет-счётчик для корпоративного порталаСчётчик должен вести подробную информацию о посетителях: адрес откуда пришёл посетитель, адрес страницы,...
Подробнее...
Что такое torrent? Что...
Что такое bittorrent?Bittorrent — это программа, которая позволяет очень быстро распространять файлы (обьемные файлы) среди пользователей. То есть, это не пиринговая сеть в чистом виде, а скорее...
Подробнее...
Скрипт показа баннеров на PHP4
Скрипты показа баннеров, изложенные в этой статье довольно элементарны.Описания баннеров, количество кликов и показов хранится в текстовом файле, поэтому наличия mysql не требуется.Для начала...
Подробнее...
Основные конструкции языка...
В этой статье я расскажу о языковых конструкциях языка веб программирования php.Изучив их, Вы уже сможете писать простенькие программы.Особенностью конструкций этого языка является простота. if-...
Подробнее...