Сайт Koder.kz сайт для Delphi программистов.

koder.kz

Web or desctop App Developer

Написать

Добавил admin | Категория Наши материалы | 20 Февраля 2014


Был как то у меня один случай. Не было денег на телефоне, зашел на сайт своего сотового оператора что бы отправить с него смс сообщение. Отправил, да не на тот номер, хотел отправить еще одно сообщение, но сайт попросил меня подождать две минуты. Естественно ждать я не стал, а написал вот такую вот программу. Программа не мудреная, для ее создания нам понадобиться:

  • IdHTTP
  • IdSSLIOHandlerSocketOpenSSL
  • IdCookieManager

Это из изяществ, остальное как обычно – едиты, лейблы, кнопки и все такое. В общем примерно как на рисунке

У IdHTTP свойство IOHandler ставим в IdSSLIOHandlerSocketOpenSSL1, ну он там будет доступен, предварительно он должен быть естественно на форме. Теперь нам нужно разобраться как получать капчу. И вообще о капче, она у нас будет такая же как и в билайне, то есть мы ее будем выводить на форму, и вводить при каждой отправке сообщения. И так капчу мы получим вот от сюда http://mobile.beeline.kz/ru/almaty/sms/mamimg.aspx немного завуалировано, согласен, но скажу честно билайнеры получают капчу именно так. Как вы наверное уже догадались что бы получить капчу нам нужно будет нажать на кнопку «получить код», да, совершенно верно. Обработчик нажатия на эту кнопку выглядет так


var List: TStringList;
    Stream: TMemoryStream;
    gif:  TgifImage;
    S : String ;
begin
  List:=TStringList.Create;
  Stream:=TMemoryStream.Create;
  IdHTTP1.Get('http://mobile.beeline.kz/ru/almaty/sms/mamimg.aspx',Stream); //грузим капчу.
  Stream.Position:=0;
  gif:=TgifImage.Create;
  gif.LoadFromStream(Stream);
  ImageCaptcha.Picture.Assign(gif);//выводим в Image
  List.Free ;
  gif.Free ;
end;

Немудренный код, должен сказать. Ну давайте его малость разберем, получаем капчу, методом GET в переменную Stream, делаем еще одну переменную (картинку или гифку) и забираем наш поток с гиф картинкой, после уже передаем визуальному компоненту рассположенному на форме нашу картинку, у меня этот компонент называется ImageCaptcha. Освобождаем память выделенную под наши переменные, собственно и все. Как добыть правильный урл на который нужно выполнить запрос мы с вами в этой статье рассматривать не будем, для этого я напишу отдельную статью. И так, как получить капчу и загрузить ее к нам на форму мы с вами разобрались, теперь давайте разберемся как отправить сообщение. Для того что бы это сделать нам нужно выполнить вот такой нехитрый POST запрос на http://mobile.beeline.kz/ru/almaty/sms/send.wbp. В этом запросе нам нужно передать, капчу, телефон, ну текст сообщения. И так код кнопки «отправить»


  var
    Data:TStringList;
begin
  Data:=TStringList.Create;
  Data.Add('send=');
  Data.Add('smstext='+MemoSend.Text); //Текст СМС сообщения
  Data.Add('smstoprefix='+ComboCod.Items[ComboCod.ItemIndex]); //Префикс 771, 705 и т.п.
  Data.Add('smsto='+EditPhone.Text); // номер
  Data.Add('dirtysmstext='+MemoSend.Text); //Текст СМС сообщения
  Data.Add('confirm_key=');
  Data.Add('translit=on');
  Data.Add('confirmcode='+EditCapth.Text); //Код с картинки
  Data.Add('x=42');
  Data.Add('y=11');
  try
    IdHTTP1.Post('http://mobile.beeline.kz/ru/almaty/sms/send.wbp', Data);
  except on E : exception do
  begin
    MessageBox(Handle,'Во время отправки сообщения возникла ошибка','Ошибка',MB_ICONHAND) ;
    exit ;
  end;
  end;
  FrmRecentNumber.addPhone(ComboCod.Items[ComboCod.ItemIndex],EditPhone.Text);
  EditPhone.Clear ;
  EditCapth.Clear ;
  MemoSend.Clear ;
end;

Давайте немного разберем получившийся у нас код, тут у нас всего одна переменная Data:TStringList; ее мы заполняем параментами которые передаются в запросе. Заполнение происходит обычным методом добавление новой стоки в стринглист – ADD. Кстати если закоментировать строчку
Data.Add('translit=on');
То сообщения будут приходить на русском языке, то есть мы таким образом отключим транслитерацию.
Отправка - IdHTTP1.Post('http://mobile.beeline.kz/ru/almaty/sms/send.wbp', Data);
Заключена в try except это сделано для того что бы мы вместо непонятного сообщения в случае ошибки увидели вполне читаемое сообщение об ошибки. Ну и последнее что мы делаем это очишаем наши компоненты на форме, поле ввода капчи, сообщения и номера телефона. После всех манипуляций у меня программа выглядит так

Как это работает. Выбираем префикс, вводим номер телефона, сообщение, нажимаем кнопку «получить код» вводим полученный код и жмем кнопку «отправить», все.ну вот в краце и все, исходники программы тут, пароль qwerty.