• 42 odgovora
  • 27.267 pregleda
Re: php - SMS preko http-a 27.04.2009. u 14:30 · pre 212 meseci #21
i zaboravih ,ako neko ima sms gateway neka mi se javi ...
Potpis
Budi ono što jesi :)
Re: php - SMS preko http-a 27.04.2009. u 15:08 · pre 212 meseci #22
Citat:
host4dzaba: pa jedno od rešenja za Nikola Poša je da iskoristiš taj sms od sezampro-a... ako imas login page ,send page mislim da ne bi bilo tesko skontati da preko fsockopen ili curl to napravis ,sa svojim nalogom.naravno ...

Hvala na trudu, pokušaću ovih dana nešto od toga...
Re: php - SMS preko http-a 27.04.2009. u 19:40 · pre 212 meseci #23
Evo ipak sam danas uzeo to da odradim i završio sam posao za oko pola sata. Ali da nije bilo Zend Framework-a, i njegove klase Zend_Http_Client, ko zna koliko bi mi vremena trebalo...
Re: php - SMS preko http-a 26.10.2009. u 11:12 · pre 206 meseci #24
Citat:
Nikola Poša: Evo ipak sam danas uzeo to da odradim i završio sam posao za oko pola sata. Ali da nije bilo Zend Framework-a, i njegove klase Zend_Http_Client, ko zna koliko bi mi vremena trebalo... :)


Može li neki detaljan opis kako si to uradio? I meni bi trebalo isto..
Re: php - SMS preko http-a 26.10.2009. u 15:03 · pre 206 meseci #25
Pa evo mogu da ti pokažem deo koda tog modela kojeg sam pravio za te potrebe:
Code:

class DNBK_SMS
{
    /**
      * Link ka Sezampro-ovoj stranici koja obavlja prijavu 
      * (login).
      *
      * @var string
      */
    protected $sezampro_login_uri = 'http://moj.sezampro.rs/logindo.asp';
    
    /**
      * Link ka Sezampro-ovoj stranici koja obavlja odjavu 
      * (logout).
      *
      * @var string
      */
    protected $sezampro_logout_uri = 'http://moj.sezampro.rs/logout.asp';
    
    /**
      * Link ka Sezampro-ovoj stranici za korisnicki nalog.
      *
      * @var string
      */
    protected $sezampro_account_uri = 'http://moj.sezampro.rs/account/default.asp';
    
    /**
      * Link ka Sezampro-ovom skriptu koji obavlja slanje 
      * SMS poruka.
      *
      * @var string
      */
    protected $sezampro_sms_send_uri = 'http://moj.sezampro.rs/service/sms/default.asp?Action=Send';
    
    /**
      * Link ka Sezampro-ovoj stranici sa koje se salju 
      * SMS poruke.
      *
      * @var string
      */
    protected $sezampro_sms_service_uri = 'http://moj.sezampro.rs/service/sms/default.asp';
    
    /**
      * Objekat klase Zend_Http_Client.
      *
      * @var Zend_Http_Client
      */
    protected $zend_http_client;
    
    /**
      * Konstruktor
      *
      * @param string Sezampro username korisnika.
      * @param string Sezampro password korisnika.
      * @return DNBK_SMS
      */
    public function __construct($username, $password)
    {    
        $this->zend_http_client = new Zend_Http_Client();
        $this->zend_http_client->setCookieJar();
        
        $this->login($username, $password);
    }
    
    /**
      * Funkcija koja salje i izvrsava zahtev na odredjenoj web 
      * stranici.
      *
      * @access protected
      * @param string Url web stranice.
      * @param string Metod kojim ce se izvrsiti zahtev (POST, GET) (opciono).
      * @param array Dodatni podaci koji trebaju da se posalju (opciono).
      * @return Zend_Http_Response
      */
    protected function send_request($uri, $method = 'GET', $data = array())
    {
        $this->zend_http_client->setUri($uri);
        if ($method == 'POST' && !empty($data)) {
            $this->zend_http_client->setParameterPost($data);
        }
        
        return $this->zend_http_client->request($method);
    }
    
    /**
      * Funkcija za prijavljivanje na Sezampro-ov korisnicki 
      * panel.
      *
      * @access protected
      * @param string Sezampro username korisnika.
      * @param string Sezampro password korisnika.
      * @return void
      */
    protected function login($username, $password)
    {
        $data = array(
            'username'  => $username,
            'password'  => $password
        );
        
        $response = $this->send_request($this->sezampro_login_uri, 'POST', $data);
        if (!$response->isSuccessful()) {
            include_once('exceptions/DNBK_SMS_Exception.php');
            throw new DNBK_SMS_Exception('Došlo je do greške pri pokušaju prijave na Sezampro-ov panel.', 1);
        }
    }
    
    /**
      * Funkcija za odjavu sa Sezampro-ovog korisnickog
      * panela.
      *
      * @access protected
      * @return void
      */
    protected function logout()
    {
        $response = $this->send_request($this->sezampro_logout_uri);
        if (!$response->isSuccessful()) {
            include_once('exceptions/DNBK_SMS_Exception.php');
            throw new DNBK_SMS_Exception('Došlo je do greške pri pokušaju odjave sa Sezampro-ovog panela.', 2);
        }
    }

Kao što vidiš, taj model utilizira Zend-ovu Http_Client komponentu. U okviru tog modela postoje još neke funkcije, al' one su baš usko vezane za sam projekat za kojeg sam pravio ovaj model, tako da ti one ne bi bile od značaja.

U principu, poenta je to izvršavanje HTTP zahteva kroz PHP kod. Bitna stvar je što uz pomoć Zend_Http_Client možeš da prenosiš sesiju, odnosno, cookie. Npr. izvršiš zahtev za login, i posle toga bi hteo da se to tvoje stanje prenosi i na ostale stranice na koje budeš slao zahtev, pošto je ideja da imaš pristup tim nekim zaštićenim stranicama, kao što je u ovom mom primeru ta stranica za slanje SMS-ova, do koje mogu da dođu samo prijavljeni korisnici.

I kao što vidiš, ti sad jednostavno možeš da pošalješ zahtev na bilo koju stranicu, npr. možeš da izvšriš tu formu za slanje SMS-ova, tako što ćeš na nju poslati POST zahtev i pritom poslati asocijativni niz, čiji indeksi odgovaraju imenima polja u toj nekoj formi. Na taj način, postižeš efekat kao da si ti, fizički, iz GUI-a, popunio i submit-ovao tu formu. Ja tako npr. imam jedan metod u okviru ovog modela (kojeg nisam prikazao gore u kodu), koji vrši baš to slanje SMS-ova, tako što POST-om šalje ovakav niz:
Code:
$data = array(
    'phone' => $broj_mobilnog,
    'Msg'   => $tekst
);

Indeksi u tom niz odgovaraju upravo imenima polja u SMS formi na Sezampro-ovoj stranici.
Re: php - SMS preko http-a 26.10.2009. u 20:08 · pre 206 meseci #26
Hvala ti na ovome, proanaliziracu detaljno.

A kada šalješ poruke na ovaj način preko Sezama, da li u pristigloj poruci piše ono from:tvoje_korisnicko_ime i da li je naglašeno da je poruka poslata preko Sezama?
Re: php - SMS preko http-a 26.10.2009. u 21:13 · pre 206 meseci #27
E pa to je jedino što mi nije išlo na ruku, piše upravo moje korisničko ime na Sezamu, a nikako ne može da se utiče na taj "from" parametar. :S Barem ja ne znam da može...
Re: php - SMS preko http-a 12.11.2009. u 04:07 · pre 206 meseci #28
Ako ima zainteresovanih da napravimo gateway, ali da svako uplati za sms koji ce poslati. Meni stoji non stop modem koji mi salje info o promenama na sistemu na sms. Nije problem da posalje i nakom drugom, ali ce me kostati kredita za sms...
Re: php - SMS preko http-a 25.11.2009. u 10:06 · pre 205 meseci #29
Dakle ovako, sms preko http je moguc. Napravio sam dosta ovakvih servisa.

Razna placanja clanarine, zatim usluge (pretraga oglasa, kurs eura...).

Takodje pravio sam ABO sisteme (pretplatis se, pa svaki put dobijas poruku), WAP Push poruke...

E sad, ne znam kakva je procedura ali moras sklopiti ugovor sa nekom kompanijom (sms provider). Ja sam cuo i radio sa HORISEN iz Paracina (mozda ce skinuti kao reklamu).

Dakle sistem funkcionise na sledeci nacin:

Korisnik posalje sms na broj 1234, ta poruka stize sms provideru, oni na osnovu keyworda znaju da je to tvoj skript.

Od podataka ti salju telefon, poruku, i ostale sigurnosne key-eve.

Ti ovo obradis i uradis najobicniji echo (sa potrebnom xml strukturom) povratne informacije.

Sms provider osluskuje sta ce tvoj skript odraditi, i odgovara korisniku.

To ti je ukratko prica o sms uslugama.

Pozdrav
Re: php - SMS preko http-a 12.03.2012. u 09:43 · pre 177 meseci #30
Pozdrav ljudi....vidim da razgovarate o ovoj temi a imam problem sa istom....moze li mi ko pomoci, bas sam se zaglavio...

Naime, razvijam sms service za odredjeni sat. Provajder je starionbg.
Cilj je da korisnik posalje sms sa odredjenim tekstom na odredjeni broj.
Nakon toga ja kupim podatke iz poruke, generisem upit u bazu, smestim ga u odredjenu promenljivu i nakon toga mi nastaje problem....

Kako da prosledim odgovor njima?

Evo ga kod koji sam izgenerisao.
Code:

<?php

//header("HTTP/1.1 200 OK");

//if ($_SERVER['REMOTE_ADDR'] like '193.203.27.244') {

  require_once "/home/skolainf/public_html/admin/lib/viewer_functions.php";


$msg_id=$_GET['msg_id'];
$msisdn=$_GET['msisdn'];
$message=$_GET['message'];
$operator=$_GET['operator'];
$short_id=$_GET['short_id'];
$provider=$_GET['provider'];
//pokupim podatke iz pristigle poruke
if (empty($_GET['sdp'])) {


$upis="INSERT INTO SMS (msg_id, msisdn, message, operator, short_id, provider) VALUES ('$msg_id', '$msisdn', '$message', '$operator', '$short_id', '$provider')";
$dodaj = mysql_query($upis);
//upisujem porkuku u bazu
}
else
{

$sdp=$_GET['sdp'];


$upis="INSERT INTO SMS (msg_id, msisdn, message, operator, short_id, provider, sdp) VALUES ('$msg_id', '$msisdn', '$message', '$operator', '$short_id', '$provider', '$sdp')";
$dodaj = mysql_query($upis);
}

$message = explode(" ", $message);


$ucenici=mysql_query("SELECT pass, ujmbg, uid FROM ucenici")or die(mysql_error());
while($info = mysql_fetch_array( $ucenici ))
{

    if (($message[2] != $info['pass']) |  ($message[1] != $info['ujmbg'])) {

//ako je neispravna kod ovde

}
else
{

$uid=$info['uid'];

$qry = "SELECT pid,oid,pkratki,opredmet,oucenik,oocena,odatum,pnaziv, GROUP_CONCAT( oocena ORDER BY oid ASC ) AS ucocene, odatum FROM oocene JOIN  predmeti ON predmeti.pid=oocene.opredmet WHERE oucenik='$uid'  GROUP BY opredmet ORDER BY recordListingID ASC ";
$q = mysql_query($qry); 

//generisem upit koji ce predstavljati odgovor
$odgovor="";
while($r=mysql_fetch_assoc($q)){




$xo = explode (",", $r['ucocene']);

for($i=0;$i<count($xo);$i++){
    
if(substr ( $xo[$i],0,1)!=0){

$ocene =   substr ( $xo[$i],0,1) .  substr($xo[$i],1) ;

}

}


$odgovor .= $r['pkratki'].$ocene." ";
$ocene="";


}

$odgovordate= date('Y-m-d H:i:s');


$update=mysql_query("UPDATE SMS SET odgovor = '$odgovor', odgovordate = '$odgovordate'  where msg_id = '$msg_id' ");

$odgovor=str_replace(" ", "+", $odgovor);


$uri="http://smsc.starionbgd.com/sms_response.php?msg=".$msg_id."&charge=OK&message=".$odgovor;


$cobj=curl_init($uri);
curl_setopt($cobj,CURLOPT_HTTPGET);
$xml=curl_exec($cobj);
curl_close($cobj);
echo $xml;
//sa ovim delom pokusao sam da im prosledim odgovor ali ne ide
//echo $url;

//header("Location: $url");

/*

$fp = fsockopen("smsc.starionbgd.com", 80, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {

$out="GET /sms_response.php?msg=".$msg_id."&charge=OK&message=".$odgovor;
   

fputs ( $fp, $out );

while (!feof($fp)) {
        $odgovor .= fgets($fp, 128);
    }
    fclose($fp);
}

*/

}


}
//}
?>


Ako iko pomogne castim rucak

dakipro: dodati code tagovi

[Ovu poruku je menjao dakipro dana 12.03.2012. u 10:59 GMT+1]
Re: php - SMS preko http-a 12.03.2012. u 10:10 · pre 177 meseci #32
Kada pozovem samu stranicu sa podacima kao da je poslata porkua, prikaze mi se zeljeni odgovor na ekranu.


Medjutim, kada pokusam da posaljem poruku sms-om, skripta je registruje, upise je u bazu, generise odgovor, upise i njega u bazu ali ja na telelfonu ne dobijam nista

nema pojma odakle da krenem...
Re: php - SMS preko http-a 14.03.2012. u 18:49 · pre 177 meseci #33
Pa ako ti je sve ok sa upitom i generacijom a kod se ne salje onda moras da debugujes sms_response.php gateway, verovatno je do njih problem.
Re: php - SMS preko http-a 15.03.2012. u 08:26 · pre 177 meseci #34
Kontaktirao sam starion preko koga se i realizuje servis, oni kazu da pre nego sto posaljem odgovor treba da odgovorim sa ok, da bi njihov sistem registrovao da nam je poruka stigla....kako to da odradim
Re: php - SMS preko http-a 15.03.2012. u 12:46 · pre 177 meseci #36
Vec sam ih pitao, zamolio sam ih da mi posalju primer kako se salje odgovor da za OK, ali su mi odgovorili da nisu nadlezni da daju takvu podrsku.....poludeh
Re: php - SMS preko http-a 18.03.2012. u 17:43 · pre 177 meseci #37
Napravili ste problerm od ničega operater mora da ima api i program koji to radi preko njih
ako nemaju api onda neće ni raditi nikakva skripta
prvo api pa onda može da se govori o skripti i pomoći
a iskustvo ti mogu preneti ali ne sa naših prostora

Re: php - SMS preko http-a 18.03.2012. u 19:47 · pre 177 meseci #38
Kad primiš request od SMS-a da je stigla poruka, pre nego što im odgovoriš preko socket-a moraš da im pošaljes status OK (poruka je primljena). Ja koliko vidim ti njima ovde nikakav response ne vraćaš. Vrati im STATUS 200. Jednostavno vrati običan die(); nekon što obradiš njihov zahtev. U bazi dodaj polje "odgovoreno" koje po prijemu poruke postavljaš na 0. Pusti cron da trči kroz bazu i nek skuplja poruke sa "odgovoreno" 0 i spucaj zahtev kao što radiš.

Ne možeš samo da prihvatiš zahtev, obradiš i da im šalješ novi request a da im na prethodni nisi poslao odgovor.
Potpis
Bad programmers worry about the code. Good programmers worry about data
structures and their relationships.
Re: php - SMS preko http-a 21.03.2012. u 11:04 · pre 177 meseci #39
kako se odgovara sa 200 OK? jel dovoljno da se napiše:
Code:
header("Status: 200 OK");
Odgovori
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme