Wysłanie sms o płatności do klientów przez bramkę GSM Huawei E303

0

Hej, chce rozesłać informacje o płatnościach w stylu:

przypominamy o płatnościach za usługi na konto XXX kwota YYYY tytulem xyzz

jak zrobić to za pomocą bramki Huawei E303 podpiętej na USB, pomoże ktoś, jakie wysłać komendy i jak?

proszę o pomoc, pozdrawiam

0

Wiesz co finalnie w delphi takiego kodu nie mam ale mam go w pythonie. Głównie chodzi o to, że musisz na odpowiedni port COM pod którym masz modem wpięty do kompa przesłać odpowiedni zestaw komend AT. Jeśli chcesz to mogę Ci podesłać przykładowy kod pythona i w prosty sposób można go sobie przepisać na delphi. Ja akurat potrzebowałem tego w połączeniu z bazą danych, która stała na debianie więc delphi tak średnio się nadawało stąd ten python. Obecnie olałem własny modem i zainwestowałem kilka zł w https://serwersms.pl/

0

Hej, jeśli będziesz tak miły, będę wdzięczny za ten kod. Myślę to wysłać za pomocą TBlockSerial (synaser z Synapse)

0

Ok mam coś takiego, ale nadal nie wysalam wiad sms, coś musi być nie tak, jest ktoś w stanie pomóc ?

PortCom := TBlockSerial.Create;
PortCom.RaiseExcept := false;
PortCom.Connect(memo1.Text);
bauds := 460800;
PortCom.Config(bauds,8,'N',0,false,false);
TimeOut := LigneMax*10000 div bauds;

tb[0]:='ATZ';
tb[1]:='AT+CMGF=1';
tb[2]:='AT+CMGS="' + '+48XXXXXXXXXX' + '"';
tb[3]:='test wiad'+'"';

for i:=0 to 3 do
 begin
  application.ProcessMessage;
  sleep(500);
  SendText:=tb[i];
  SendText:=SendText + #13#10;
  PortCom.SendString(SendText);
 end;

0

mam jeszcze taki problem,
modem instaluje się jako Remote NDIS based Internet Sharing Device, za chiny nie wiem jak przypisac to cudo do portu com, po instalacji odłączeniu podłączeniu nie dochodzi żadny nowy port com, a jedynie
Remote NDIS based Internet Sharing Device

Myślę ze problem z komunikacja wynika ze względu na ten wirtualny protokół

Wiecie może Jak to wykorzystać lub zmienić na port com w windows7 ?

0

Nie wiem jak Twoje urządzenie ale moje po zainstalowaniu wszystkich starowników widoczne w systemie jest jako KartaSD, KartaWifi oraz modem na dwóch portach COM. Mało tego moje urządzenie ma wbudowane oprogramowanie Nokia Internet Connection na którym odpalam np Aero2 i wszystko bangla. Zmieniając kartę SIM z Aeor2 na normalną kartę mogę tym softem co Ci wysłałem wysyłać sms. Sprawdź czy aby w managerze urządzeń nie masz przypadkiem czegoś nowego w portach COM po włożeniu modemu pod usb.

Spotkałem się też z sytuacją gdzie problemem był port USB w kompie (coś nie banglało) i na innym porcie poszło bezproblemowo.

0

Pythona można od biedy uruchomić z Delphi (w trybie embedded).

Generalnie tryby są dwa:

Współpraca jest na tyle sprawna że udawało mi się nawet pokazywać ekrany Free Pascal z programu w Python.

0

Tutaj macie zdjęcie z danych o sb, i nie wiem jak się nawiązać do tego..
https://zapodaj.net/5f8f711610f6c.png.html

a co jeśli zamaist po porcie com wykrozystac adres ip?

jak wykonać ten kod php w delphi ?
próbowałem przy idhttp ale problem pojawia sie gdyż nie znam odpowiednika curl_setopt

php działa poprawnie, ale nalezy posatwic serwer php.. nie da sie tego zrobic idhttp ?

<?php
error_reporting(E_ALL);
// Argumentem jest URL do skryptu z listingu 2.1
$url = ('http://192.168.8.1/api/webserver/token');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER,0);
$curl_scraped_page = curl_exec($ch);
curl_close($ch);
 
preg_match('#<token>(.+?)</token>#si', $curl_scraped_page, $matches);
$token = ($matches[1]);
echo ($token);
 
$url = ("http://192.168.8.1/api/sms/send-sms");
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, ("-H __RequestVerificationToken: ".$token." --data <?xml version='1.0' encoding='UTF-8'?><request><Index>-1</Index><Phones><Phone>xxxxxxxxx</Phone></Phones><Sca></Sca><Content>ala ma kota</Content><Length>-1</Length><Reserved>1</Reserved><Date>-1</Date></request>"));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER,0);
curl_setopt($ch, CURLOPT_URL,$url);
$curl_scraped_page = curl_exec($ch);
curl_close($ch);
 
echo ($curl_scraped_page);
 
?> 

0

z tego co widzę to to jest zwykły CURL możesz go normalnie użyć w delphi jeśli masz taką potrzebę:
http://stackoverflow.com/questions/15928938/using-curl-via-indy-in-delphi-xe2
zwykły indy też się da tu wołam @kAzek, a nawet synapse i tu wołam @olesio bo chyba najwięcej postów synapse u niego widziałem

0

Tu nie ma nic wielkiego jest zwykły GET tej strony po token później wyrażenie regularne wyciągające token z tego co zostanie zwrócone pomiędzy <token> a </token> i wysłanie POST tego co CURLOPT_POSTFIELDS na ten adres send-sms.W IdHTTP ustaw HandleRedirect na True a reszta jak jest i powinno działać. Jak coś to mogę naklepać te 5 linijek kodu ale myślę że sobie poradzisz.

0
Gimo napisał(a):

Ok mam coś takiego, ale nadal nie wysalam wiad sms, coś musi być nie tak, jest ktoś w stanie pomóc ?

Na początku zanim zaczniesz pisać program ogarnij samo wysyłanie wiadomości SMS za pomocą komend AT. Sprawdź czy w ogóle wysyłasz dobre komendy. Wyślij je za pomocą chociażby http://www.chipkin.com/using-putty-for-serial-com-connections-hyperterminal-replacement/ Bo mi osobiście wydaje się, że robisz to źle. Co więcej taki terminal będzie na żywo odbierać to co modem zwraca, a czasem to pomoże rozwiązać zagadkę w chwilę.

Nie rozumiem również dlaczego chcesz resetować modem przed wysłaniem SMS'a za pomocą ATZ, co więcej po wysłaniu tej komendy potrzeba kilku sekund zanim zaczniesz wysyłać kolejne oraz zapewne będzie potrzeba wprowadzić PIN. Tu masz tutka http://www.smssolutions.net/tutorials/gsm/sendsmsat/

0
kAzek napisał(a):

Tu nie ma nic wielkiego jest zwykły GET tej strony po token później wyrażenie regularne wyciągające token z tego co zostanie zwrócone pomiędzy <token> a </token> i wysłanie POST tego co CURLOPT_POSTFIELDS na ten adres send-sms.W IdHTTP ustaw HandleRedirect na True a reszta jak jest i powinno działać. Jak coś to mogę naklepać te 5 linijek kodu ale myślę że sobie poradzisz.

mhymm cos jest nie tak wykonuje to w taki sposób:
oczywiscie pobieram poprawnie token, ale przy wykonaniu wysylki sms dostaje komunikat:
socket error #10054
connection rest by per.
o co może chodzić ?

var
s,s1,s_token:string;
zap: TStringList;
pds : TStringStream;
begin
s_token:=edit1.Text;

pds := TStringStream.Create('');
s:='http://192.168.8.1/api/sms/send-sms';
zap := TStringList.Create;

s1:=  '-H __RequestVerificationToken: ' + s_token + ' --data <?xml version=' +
      #39 + '1.0' + #39 + ' encoding=' +
      #39+'UTF-8'+#39+'?>' + s_token +
      '<request><Index>-1</Index><Phones><Phone>+48xxxxxxxx</Phone>...</Phones>'+
      '<Sca></Sca> <Content>HELLO</Content><Length>-1</Length> <Reserved>1</Reserved>'+
      '<Date>-1</Date><SendType></SendType></request>';
   
zap.Add(s1);

http.Post(s,zap,pds);

memo1.Lines.Add(pds.DataString+#13#10+s1);
0

Po pierwsze źle wysyłasz dane POST tak jak napisałem ma być to co w CURLOPT_POSTFIELDS ale bez -H to oznacza nagłówek (header) i do rodzielania nazwy parametru od danych nie stosuje sie : tylko = a więc:

s1:=  'RequestVerificationToken=' + s_token + ' --data <?xml version=' +
      #39 + '1.0' + #39 + ' encoding=' +
      #39+'UTF-8'+#39+'?>' + s_token +
      '<request><Index>-1</Index><Phones><Phone>+48xxxxxxxx</Phone>...</Phones>'+
      '<Sca></Sca> <Content>HELLO</Content><Length>-1</Length> <Reserved>1</Reserved>'+
      '<Date>-1</Date><SendType></SendType></request>';

a jak dalej nie przejdzie do uses IdURI i spróbuj:


s1:=  'RequestVerificationToken=' + TIdURI.ParamsEncode(s_token + ' --data <?xml version=' +
      #39 + '1.0' + #39 + ' encoding=' +
      #39+'UTF-8'+#39+'?>' + s_token +
      '<request><Index>-1</Index><Phones><Phone>+48xxxxxxxx</Phone>...</Phones>'+
      '<Sca></Sca> <Content>HELLO</Content><Length>-1</Length> <Reserved>1</Reserved>'+
      '<Date>-1</Date><SendType></SendType></request>');

ewentualnie zamiast tych #39 mogły by być zwykłe " (ale to na jedno wychodzi..) a jak dalej nie to będę myślał co jeszcze...

0

kAzek nadal mam ten sam problem, connection rest by per, mhymmm

0

A nie jest przypadkiem tak że firewall ci bruździ? Masz ustawione reguły?
Możesz też spróbować przed POST dodać:

http.Request.ContentType:= 'application/x-www-form-urlencoded';

Poza tym widzę że z tego XML dziwne rzeczy wychodzą po TIdURI.ParamsEncode zamiast tego spróbuj HTTPEncode z Web.HTTPApp lub URIEncode z REST.Utils

Najlepiej pasowało by jakiś sniffer i zobaczyć co faktycznie tam się dzieje.

0

sorki, nie było mnie ostatnio, jutro to sprawdzę wiresharkiem :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1