How-To Serwer SMSC - Powiadomienia o alertach (Bramki SMS/Gadu-Gadu)

Status
The first post in this thread is a WikiPost, and can be edited by anyone with the appropriate permissions.

Silas Mariusz

SysOp
Administrator
Apr 5, 2008
9,144
7
1,803
153
37
www.devspark.pl
QNAP
TS-x77
Ethernet
1 GbE
Plus GSM
Bramka sms.plus.pl
(http://www1.plus.pl/bsm/)
  1. Na serwerze Web obsługującym PHP (i curl) umieść poniższy kod sms.plus-bsm.php
    PHP:
    <?php
    /*
    * 2013.08.01 Silas Mariusz Grzybacz
    *
    * QNAP CLUB www.qnapclub.pl
    *
    * Based on perl's sms.miastoplusa.pl
    * http://code.google.com/p/skrypty-sms/
    */
    
    if (get_magic_quotes_gpc()) {
        function stripslashes_array(&$arr) {
            foreach ($arr as $k => &$v) {
                $nk = stripslashes($k);
                if ($nk != $k) {
                    $arr[$nk] = &$v;
                    unset($arr[$k]);
                }
                if (is_array($v)) {
                    stripslashes_array($v);
                } else {
                    $arr[$nk] = stripslashes($v);
                }
            }
        }
        stripslashes_array($_POST);
        stripslashes_array($_GET);
        stripslashes_array($_REQUEST);
        stripslashes_array($_COOKIE);
    }
    
    $conf = array (
        "login" => "username",
        "password" => "password",
        "sender" => "QNAPCLUB",
        "number" => "",
        "message" => "",
        "useragent" => "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)",
        "cookiepath" => dirname(__FILE__) . "/cookies.txt",
        "timeout" => 10,
        "separate" => chr(124)
    );
    
    function sendSms()
    {
        global $conf;
    
        $post = array (
            "login=". $conf["login"],
            "action=login",
            "password=". $conf["password"],
            "success-url=http://www1.plus.pl/bsm/auth"
        );
    
        $c = curl_init();
        curl_setopt($c, CURLOPT_URL, "https://www1.plus.pl/sso/logowanie/auth");
        curl_setopt($c, CURLOPT_POST, true);
        curl_setopt($c, CURLOPT_POSTFIELDS, implode("&", $post));
        curl_setopt($c, CURLOPT_COOKIEFILE, $conf["cookiepath"]);
        curl_setopt($c, CURLOPT_COOKIEJAR, $conf["cookiepath"]);
        curl_setopt($c, CURLOPT_USERAGENT, $conf["useragent"]);
        curl_setopt($c, CURLOPT_TIMEOUT, $conf["timeout"]);
        curl_setopt($c, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
        curl_exec($c);
        curl_close($c);
    
        $header = array (
            'Accept-Language: pl,en-us;q=0.7,en;q=0.3',
            'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
            'User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:9.0.1) Gecko/20100101 Firefox/9.0.1',
            'Host: www1.plus.pl',
            'Accept-Encoding: gzip,deflate',
            'Accept-Charset: ISO-8859-2,utf-8;q=0.7,*;q=0.7',
            'Keep-Alive: 300',
            'Connection: keep-alive',
            'Pragma: no-cache',
            'Cache-Control: no-cache',
            'Content-Type: text/x-gwt-rpc; charset=utf-8',
            'X-GWT-Permutation: 22E4064F5698D299DC724EC04F1478DC',
            'X-GWT-Module-Base: http://www1.plus.pl/bsm/',
            'Referer: http://www1.plus.pl/bsm/'
        );
    
        $s = $conf["separate"];
    
        $sms =
            "7".$s."0".$s."10".$s."http://www1.plus.pl/bsm/".$s."E23E25B5B18D1CA333516D75EAF0966A".$s.
            "pl.plus.map.bsm.gwt.client.service.SendSmsService".$s."send".$s.
            "pl.plus.map.bsm.core.gwt.dto.MessageTO/1868309509".$s."48c4f749a5f2b2253c0932b85699e9ec".$s.
            $conf["message"].$s."".$s.$conf["number"].$s.$conf["sender"].
            $s."1".$s."2".$s."3".$s."4".$s."1".$s."5".$s."5".$s."0".$s."0".$s."0".$s."0".$s."6".$s."0".$s."0".
            $s."7".$s."0".$s."0".$s."0".$s."0".$s."0".$s."0".$s."1".$s."1".$s."0".$s."0".$s."0".$s."0".$s."0".
            $s."0".$s."0".$s."0".$s."0".$s."0".$s."0".$s."0".$s."0".$s."0".$s."0".$s."0".$s."0".$s."8".$s."9".
            $s."0".$s."0".$s."0".$s."10".$s."0".$s."0".$s."8".$s."0".$s."0".$s."0".$s."0".$s
        ;
    
        $c = curl_init();
        curl_setopt($c, CURLOPT_URL, "http://www1.plus.pl/bsm/service/SendSmsService");
        curl_setopt($c, CURLOPT_POST, true);
        curl_setopt($c, CURLOPT_POSTFIELDS, $sms);
        curl_setopt($c, CURLOPT_HTTPHEADER, $header);
        curl_setopt($c, CURLOPT_REFERER, "http://www1.plus.pl/bsm/");
        curl_setopt($c, CURLOPT_COOKIEFILE, $conf["cookiepath"]);
        curl_setopt($c, CURLOPT_COOKIEJAR, $conf["cookiepath"]);
        curl_setopt($c, CURLOPT_USERAGENT, $conf["useragent"]);
        curl_setopt($c, CURLOPT_TIMEOUT, $conf["timeout"]);
        curl_setopt($c, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
        $return = curl_exec($c);
        curl_close($c);
    
        if (preg_match("/java\.util\.Date/", $return))
        {
            return true;
        }
        else
        {
            return false;
        }
    
    }
    
    if ($_GET['login'] != "") {
        $conf["login"] = $_GET['login'];
    }
    
    if ($_GET['password'] != "") {
        $conf["password"] = $_GET['password'];
    }
    
    if ($_GET['number'] != "") {
        $conf["number"] = $_GET['number'];
    }
    
    if ($_GET['sender'] != "") {
        $conf["sender"] = $_GET['sender'];
    }
    
    if ($_GET['message'] != "") {
        $conf["message"] = $_GET['message'];
    }
    
    echo "<pre>
    -------------------------------------------------------------------------------
    login   : ". $conf["login"] ."
    password: <secret>
    sender  : ". $conf["sender"] ."
    number  : ". $conf["number"] ."
    message : 
    ". $conf["message"] ."
    -------------------------------------------------------------------------------\n";
    
    if (sendSMS())
    {
        echo "Status (0): Message sent! \n";
    }
    else
    {
        echo "Status (127): Unknown or un'def error. \n";
    }
    
    echo "-------------------------------------------------------------------------------
    </pre>";
    
    ?>
    (Download: http://pool.qnapclub.pl/projects/tools/smsc-poland-26001/sms.plus-bsm.zip)
  2. W ustawieniach serwera SMSC dodaj usługodawcę "Plus BSM"
  3. Jako szablon tekstowy URL wpisz poniższy link podmieniając adres i ścieżkę na własną lub korzystaj z podanej:
    Code:
    http://pool.qnapclub.pl/projects/tools/smsc-poland-26001/sms.plus-bsm.php?login=@@UserName@@&password=@@Password@@&number=@@PhoneNumber@@&message=@@Text@@&sender=NAS
  4. Po zapisaniu ustawień, wybierz z listy dodanego usługodawcę i podaj login oraz hasło do bramki SMS.
    (Rejestracja jest darmowa i nie wymaga posiadania telefonu w sieci: Logowanie)
  5. W powiadomieniach o alertach zaznacz powiadomienia SMS, a w ustawieniach powiadomień wprowadź docelowy numer telefonu.

Orange
Bramka Mbox
  1. Na serwerze Web obsługującym PHP (i curl) umieść poniższy kod sms.orange-mbox-2014-2.php
    PHP:
     <?php
    /*
    Skrypt zawiera dwie funkcje CURL obsługująca mBox'a orange.pl.
    Skrypt wykorzystuje Xpath'a.
    PHP 5*...
    
    Skrypt pozwala na wysyłanie długich smsów, dzieli wpisany tekst na 640 znaków akceptowanych przez bramkę i
    wysyła jako 'n' ilość smsów.
    
    Zachęcam do dowolnego wykorzystania, modyfikacji i ulepszania (też chciałbym kopię ;)).
    piotr eldora pl
    20130604
    */
    
    
    /*
    Ustawienie zmiennych użytkownika, wystarczy wpisać dane i skrypt będzie po prostu działał
    */
    
    
    if (get_magic_quotes_gpc()) {
        function stripslashes_array(&$arr) {
            foreach ($arr as $k => &$v) {
                $nk = stripslashes($k);
                if ($nk != $k) {
                    $arr[$nk] = &$v;
                    unset($arr[$k]);
                }
                if (is_array($v)) {
                    stripslashes_array($v);
                } else {
                    $arr[$nk] = stripslashes($v);
                }
            }
        }
        stripslashes_array($_POST);
        stripslashes_array($_GET);
        stripslashes_array($_REQUEST);
        stripslashes_array($_COOKIE);
    }
    
    $login = 'username'; // nazwa użytkownika orange.pl
    $password = 'password'; // hasło do orange.pl
    $number = ''; // numer odbiorcy (+48xxxxxxxxx)
    $content = ''; // treść wiadomości
    
    if ($_GET['login'] != "") {
        $login = $_GET['login'];
    }
    
    if ($_GET['password'] != "") {
        $password = $_GET['password'];
    }
    
    if ($_GET['number'] != "") {
        $number = '+'.$_GET['number'];
    }
    
    if ($_GET['message'] != "") {
        $content = $_GET['message'];
    }
    
    echo "<pre>
    -------------------------------------------------------------------------------
    login   : ". $login ."
    password: <secret>
    number  : ". $number ."
    message : 
    ". $content ."
    -------------------------------------------------------------------------------\n";
    
    
    
    
    // określenie użytkownia oraz hasła do portalu orange.pl
    $user = $login;
    $pass = $password;
    
    // określenie danych wiadomości sms
    //$number = $_GET['to'];
    $msg = $content;
    
    // ------------------------------ //
    
    
    
    
    
    /*
    Ustawienia podstawowych zmiennych skryptu
    */
    
    // ustawienie klienta
    $userAgent = $_SERVER['HTTP_USER_AGENT'];
    //$userAgent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3';
    // ustawienia pliku cookie, należy się upewnić, że można zapisywać
    $cookie = '/tmp/'.md5(microtime());
    // Czy usunąć wiadomość po wysłaniu?
    $usun = 1;
    
    // określenie wykorzystywanych URL
    $startURL = 'https://www.orange.pl/zaloguj.phtml';
    $loginURL = 'https://www.orange.pl/zaloguj.phtml?_DARGS=/ocp/gear/infoportal/portlets/login/login-box.jsp';
    $smsURL = 'https://www.orange.pl/portal/map/map/message_box?mbox_view=newsms';
    $sendURL = 'https://www.orange.pl/portal/map/map/corpo_message_box?_DARGS=/gear/mapmessagebox/smsform.jsp';
    $sentURL = 'https://www.orange.pl/portal/map/map/corpo_message_box?mbox_view=sentmessageslist&mbox_folder=Sent';
    $trashURL = 'https://www.orange.pl/portal/map/map/corpo_message_box?mbox_view=messageslist&mbox_folder=Trash';
    $logoutURL = 'https://www.orange.pl/portal/map/map/corpo_message_box?_DARGS=/portal/layoutTemplates/html/header_welcome.jsp.1';
    
    /*
    *
    *  Koniec zmiennych kontrolnych
    *
    */
    // fukcja pobierania stron
    function curl_get ($url) {
        global $userAgent,$cookie;
        $ch = curl_init();
    //    curl_setopt($ch, CURLOPT_VERBOSE, true);
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
        curl_setopt($ch, CURLOPT_COOKIEJAR,$cookie);
        curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($ch, CURLOPT_VERBOSE, 0);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        $out = curl_exec($ch);
        curl_close($ch);
        return $out;
    }
    
    // funkcja wysyłania danych do formularzy
    function curl_post ($url,$data,$referer) {
        global $userAgent,$cookie;
        $ch = curl_init();
    //    curl_setopt($ch, CURLOPT_VERBOSE, true);
        curl_setopt($ch, CURLOPT_TIMEOUT, 20);
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
        curl_setopt($ch, CURLOPT_REFERER, $referer);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
        curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    
        $out = curl_exec($ch);
        curl_close($ch);
        return $out;
    }
    
    
    /* funkcja szukająca błędów na stronie, niestety nie może być uniwersalna,
       ponieważ w przypadku logowania curl wysyła POST do przekierowywanego GET.
       Można to obejść i jest to na liście todo...
    */
    function error_check ($page) {
        $doc = new DOMDocument();
        @$doc ->loadHTML($page);
        $xpath = new DOMXPath($doc);
        $error = $xpath->evaluate('//div[@class="box-error"]/p');
        if ($error -> length > 0) {
        for ($n=0;$n < $error->length;$n++) {
            $error_text = $error ->item($n) -> nodeValue;
            echo  $error_text . "<br>\n";
        }
        $fp = fopen('page.html', 'w');
        fwrite($fp,$page);
        fclose($fp);
        exit;
        }
        return false;
    }
    // funkcja wysyłająca sms'y
    function send_sms ($msg,$number) {
        global $sendURL,$smsPost,$smsURL;
        // Wyszukiwanie tokena
        $doc = new DOMDocument();
        @$doc->loadHTML(curl_get($smsURL));
        $xpath = new DOMXPath($doc);
        $token = $xpath->evaluate('//input[@name="/amg/ptk/map/messagebox/formhandlers/MessageFormHandler.token"]')->item(0)->getAttribute('value');
        $sesToken = $xpath->evaluate('//input[@name="_dynSessConf"]')->item(0)->getAttribute('value');
    
        // Formularz wysyłania wiadomości sms
        $smsData = array(
        '_dyncharset' => 'UTF-8',
        '_dynSessConf' => $sesToken,
        '/amg/ptk/map/messagebox/formhandlers/MessageFormHandler.type' => 'sms',
        '_D:/amg/ptk/map/messagebox/formhandlers/MessageFormHandler.type' => ' ',
        'enabled' => 'true',
        '/amg/ptk/map/messagebox/formhandlers/MessageFormHandler.errorURL' => '/portal/map/map/message_box?mbox_view=newsms',
        '_D:/amg/ptk/map/messagebox/formhandlers/MessageFormHandler.errorURL' => ' ',
        '/amg/ptk/map/messagebox/formhandlers/MessageFormHandler.successURL' => '/portal/map/map/message_box?mbox_view=messageslist',
        '_D:/amg/ptk/map/messagebox/formhandlers/MessageFormHandler.successURL' => ' ',
        '/amg/ptk/map/messagebox/formhandlers/MessageFormHandler.to' => $number,
        '_D:/amg/ptk/map/messagebox/formhandlers/MessageFormHandler.to' => ' ',
        '_D:/amg/ptk/map/messagebox/formhandlers/MessageFormHandler.body' => ' ',
        '/amg/ptk/map/messagebox/formhandlers/MessageFormHandler.body' => $msg,
        '/amg/ptk/map/messagebox/formhandlers/MessageFormHandler.token' => $token,
        '_D:/amg/ptk/map/messagebox/formhandlers/MessageFormHandler.token' => ' ',
        '/amg/ptk/map/messagebox/formhandlers/MessageFormHandler.create.x' => '0',
        '/amg/ptk/map/messagebox/formhandlers/MessageFormHandler.create.y' => '0',
        '_D:/amg/ptk/map/messagebox/formhandlers/MessageFormHandler.create' => ' ',
        '_DARGS' => '/gear/mapmessagebox/smsform.jsp'
           );
        $smsPost = '';
        foreach ($smsData as $a => $b) {
        $smsPost .= urlencode($a). '=' .urlencode($b). '&';
        }
        $smsPost = substr($smsPost,0,-1);
        // Wysyłanie wiadomości
        $send = curl_post($sendURL,$smsPost,$smsURL);
        error_check($send);
        return $send;
    }
    // Strona początkowa logowania
    $startPage = curl_get($startURL);
    $doc = new DOMDocument();
    @$doc->loadHTML($startPage);
    
    $xpath = new DOMXPath($doc);
    $sesToken = $xpath->evaluate('//input[@name="_dynSessConf"]')->item(0)->getAttribute('value');
    // Formularz logowania do portalu orange.pl
    
    $loginData = array(
        '_dyncharset' => 'UTF-8',
        '_dynSessConf' => $sesToken,
        '/tp/core/profile/login/ProfileLoginFormHandler.loginErrorURL' => 'https://www.orange.pl/zaloguj.phtml',
        '_D:/tp/core/profile/login/ProfileLoginFormHandler.loginErrorURL' => ' ',
        '/tp/core/profile/login/ProfileLoginFormHandler.loginSuccessURL' => '',
        '_D:/tp/core/profile/login/ProfileLoginFormHandler.loginSuccessURL' => ' ',
        '/tp/core/profile/login/ProfileLoginFormHandler.firstEnter' => 'true',
        '_D:/tp/core/profile/login/ProfileLoginFormHandler.firstEnter' => ' ',
        '/tp/core/profile/login/ProfileLoginFormHandler.value.login' => $user,
        '_D:/tp/core/profile/login/ProfileLoginFormHandler.value.login' => ' ',
        '/tp/core/profile/login/ProfileLoginFormHandler.value.password' => $pass,
        '_D:/tp/core/profile/login/ProfileLoginFormHandler.value.password' => ' ',
        '_D:/tp/core/profile/login/ProfileLoginFormHandler.rememberMe' => ' ',
        '/tp/core/profile/login/ProfileLoginFormHandler.login.x' => '0',
        '/tp/core/profile/login/ProfileLoginFormHandler.login.y' => '0',
        '_D:/tp/core/profile/login/ProfileLoginFormHandler.login' => ' ',
        '_DARGS' => '/ocp/gear/infoportal/portlets/login/login-box.jsp'
           );
    // Poprawienie stringów
    $loginPost = '';
    foreach ($loginData as $a => $b) {
        $loginPost .= urlencode($a). '=' .urlencode($b). '&';
    }
    $loginPost = substr($loginPost,0,-1);
    // Logowanie
    $login = curl_post($loginURL,$loginPost,$startURL);
    
    if (preg_match('/Podałeś błędny login lub hasło. Sprawdź je i wpisz jeszcze raz/', $login)) {
        echo "Błędne dane użytkownika.<br>\n";
        exit;
    }
    if (preg_match('/wyloguj/', $login)) {
        echo "Zalogowano pomyślnie.<br>\n";
        flush();
    }
    else {
        echo "Serwer przesłał nieoczekiwany status procesu logowania, sprawdź adres url strony logowania.<br>\n";
        $fp = fopen('/tmp/orange_login.html', 'w');
        fwrite($fp,$login);
        fclose($fp);
        exit;
    }
    
    //error_check($login);
    
    /*
    *
    * Wysyłanie wiadomości
    *
    */
    
    // dzieli wiadomości dłuższe niż 638 znaków na kilka sms'ów
    if (strlen($msg) >640) {         // sprawdza długość sms'a
        $msg = str_split($msg,640);     // dzieli sms'a na kilka wiadomości
        $n_sms = count($msg);        // zlicza ilość wiadomości do wysłania
        for ($n=0;$n<$n_sms;$n++) {
        $sent = send_sms($msg[$n],$number);
        echo "Wysłano część ".($n+1)." z $n_sms.<br>\n";
        flush();
    //    sleep(3);
        }
    }
    else {
        $n_sms = 1;
        $sent = send_sms($msg,$number);
    }
    if (!error_check($sent)) {
        echo "<br>Wiadomość wysłano poprawnie.<br>\n";
        $doc = new DOMDocument();
        @$doc -> loadHTML($sent);
        $xpath = new DOMXPath($doc);
        $nsms1 = $xpath->evaluate('//div[@id="syndication"]//p[@class="item"]/span[@class="value"]')->item(0)->nodeValue;
        $nsms2 = $xpath->evaluate('//div[@id="syndication"]//p[@class="item"]/span[@class="value"]')->item(1)->nodeValue;
        echo "Pozosotało $nsms1 bezpłatnych smsów oraz $nsms2 dodatkowych.<br>\n";
    }
    
    // Usuwanie wiadomości
    
    if ($usun = 1) {
        echo "Usuwanie wiadomości.<br>\n";
        $sent = curl_get($sentURL);
        $doc = new DOMDocument();
        //@$doc->loadHTMLFile("sent.html");
        @$doc -> loadHTML($sent);
        $xpath = new DOMXPath($doc);
        $n_msg = $xpath->evaluate('count(//input[@name="/amg/ptk/map/messagebox/formhandlers/MessagesFormHandler.messages"])');
        echo "Ilość wiadomości wysłanych: $n_msg, do usunięcia $n_sms.<br>\n";
        $sesToken = $xpath->evaluate('//input[@name="_dynSessConf"]')->item(0)->getAttribute('value');
        $postData = array(
        '_DARGS' => '/gear/mapmessagebox/sentmessageslist.jsp',
        '_dyncharset' => 'UTF-8',
        '_dynSessConf' => $sesToken,
        '/amg/ptk/map/messagebox/formhandlers/MessagesFormHandler.folder' => '',
        '_D:/amg/ptk/map/messagebox/formhandlers/MessagesFormHandler.folder' => ' ',
        '/amg/ptk/map/messagebox/formhandlers/MessagesFormHandler.successURL' => '',
        '_D:/amg/ptk/map/messagebox/formhandlers/MessagesFormHandler.successURL' => ' ',
        '/amg/ptk/map/messagebox/formhandlers/MessagesFormHandler.errorURL' => '',
        '_D:/amg/ptk/map/messagebox/formhandlers/MessagesFormHandler.errorURL' => ' ',
        '/amg/ptk/map/messagebox/formhandlers/MessagesFormHandler.delete.x' => '30',
        '/amg/ptk/map/messagebox/formhandlers/MessagesFormHandler.delete.y' => '12',
        '_D:/amg/ptk/map/messagebox/formhandlers/MessagesFormHandler.delete' => ' ',
        '/amg/ptk/map/messagebox/formhandlers/MessagesFormHandler.folder' => 'Sent',
        '_D:/amg/ptk/map/messagebox/formhandlers/MessagesFormHandler.folder' => ' ',
        '/amg/ptk/map/messagebox/formhandlers/MessagesFormHandler.successURL' => '/portal/map/map/message_box?mbox_folder=Sent',
        '_D:/amg/ptk/map/messagebox/formhandlers/MessagesFormHandler.successURL' => ' ',
        '/amg/ptk/map/messagebox/formhandlers/MessagesFormHandler.errorURL' => '/portal/map/map/message_box?mbox_folder=Sent',
        '_D:/amg/ptk/map/messagebox/formhandlers/MessagesFormHandler.errorURL' => ' '
        );
        $delPost = '';
        foreach ($postData as $a => $b) {
        $delPost .= urlencode($a). '=' .urlencode($b). '&';
        }
        $delPost = substr($delPost,0,-1);
        // Usuwanie wszystkich aktualnie wysłanych wiadomości
        for ($i=0;$i<$n_sms;$i++) {
        $msgid = $xpath->evaluate('//input[@name="/amg/ptk/map/messagebox/formhandlers/MessagesFormHandler.messages"]')->item($i)->getAttribute('value');
        $delPost .= '&'. urlencode('/amg/ptk/map/messagebox/formhandlers/MessagesFormHandler.messages'). '=' .urlencode($msgid);
        $delPost .= '&'. urlencode('_D:/amg/ptk/map/messagebox/formhandlers/MessagesFormHandler.messages'). '=' .urlencode(' ');
        }
        $delPost .= '&'. urlencode('_DARGS'). '=' .urlencode('/gear/mapmessagebox/sentmessageslist.jsp');
        $delPost .= '&'. urlencode('_D:/amg/ptk/map/messagebox/formhandlers/MessagesFormHandler.messages'). '=' .urlencode(' ');
    
        // Przenoszenie wiadomości do kosza
        curl_post($sentURL,$delPost,$sentURL);
        
        // Otwieranie kosza
        curl_get($trashURL);
        // Dostosowanie zapytania post
        $s = array('sentmessageslist','Sent');
        $r = array('messageslist','Trash');
        $delPost = str_replace($s,$r,$delPost);
        
        // Usuwanie wiadomości
        curl_post($trashURL,$delPost,$trashURL);
        // można kiedyś dodać weryfikacje...
        echo "Usunięto.<br>\n";
    
    }
    
    
    // Formularz wylogowania z portalu orange.pl
    
    $sesToken = $xpath->evaluate('//input[@name="_dynSessConf"]')->item(0)->getAttribute('value');
    $logoutData = array(
        '_dyncharset' => 'UTF-8',
        '_dynSessConf' => $sesToken,
        '/amg/ptk/map/core/formhandlers/AdvancedProfileFormHandler.logoutSuccessURL' => '/start.phtml',
        '_D:/amg/ptk/map/core/formhandlers/AdvancedProfileFormHandler.logoutSuccessURL' => ' ',
        '/amg/ptk/map/core/formhandlers/AdvancedProfileFormHandler.logoutErrorURL' => '/portal/map/map/message_box?mbox_view=newsms',
        '_D:/amg/ptk/map/core/formhandlers/AdvancedProfileFormHandler.logoutErrorURL' => ' ',
        '/amg/ptk/map/core/formhandlers/AdvancedProfileFormHandler.logout' => 'wyloguj sie',
        '_D:/amg/ptk/map/core/formhandlers/AdvancedProfileFormHandler.logout' => ' ',
        '_DARGS' => '/portal/layoutTemplates/html/header_welcome.jsp.1'
           );
    // Poprawienie stringów
    $logoutPost = '';
    foreach ($logoutData as $a => $b) {
        $logoutPost .= urlencode($a). '=' .urlencode($b). '&';
    }
    $logoutPost = substr($logoutPost,0,-1);
    $logout = curl_post($logoutURL,$logoutPost,$smsURL);
    
    unlink($cookie);
    
    ?>
    Download: http://pool.qnapclub.pl/projects/tools/smsc-poland-26003/sms.orange-mbox-2014-2.zip
  2. W ustawieniach serwera SMSC dodaj usługodawcę "Orange Mbox"
  3. Jako szablon tekstowy URL wpisz poniższy link podmieniając adres i ścieżkę na własną lub korzystaj z podanej:
    Code:
    http://pool.qnapclub.pl/projects/tools/smsc-poland-26003/sms.orange-mbox-2014-2.php?login=@@UserName@@&password=@@Password@@&number=@@PhoneNumber@@&message=@@Text@@
  4. Po zapisaniu ustawień, wybierz z listy dodanego usługodawcę i podaj login oraz hasło do bramki SMS Orange Mbox. (Rejestracja jest darmowa, ale usługa tylko dla klientów: Request rejected - www.orange.pl)
  5. W powiadomieniach o alertach zaznacz powiadomienia SMS, a w ustawieniach powiadomień wprowadź numer telefonu.

T-Mobile
Bramka Sponsorowana API - darmowa do 10 sms./dzień
  1. W ustawieniach serwera SMSC dodaj usługodawcę "Era-sponsored"
  2. Jako szablon tekstowy URL wpisz poniższy link podmieniając adres i ścieżkę na własną lub korzystaj z podanej:
    Code:
    http://www.era.pl/msg/api/do/tinker/sponsored?login=@@UserName@@&password=@@Password@@&number=@@PhoneNumber@@&failure=http://www.era.pl&success=http://rozrywka.era.pl&mms=false&&message=@@Text@@
  3. Po zapisaniu ustawień, wybierz z listy dodanego usługodawcę i podaj login oraz hasło do bramki sponsorowanej.
  4. W powiadomieniach o alertach zaznacz powiadomienia SMS, a w ustawieniach powiadomień wprowadź numer telefonu.
Bramka Multimedialna API - płatna
  1. W ustawieniach serwera SMSC dodaj usługodawcę "Era-omnix"
  2. Jako szablon tekstowy URL wpisz poniższy link podmieniając adres i ścieżkę na własną lub korzystaj z podanej:
    Code:
    http://www.era.pl/msg/api/do/tinker/omnix?login=@@UserName@@&password=@@Password@@&number=@@PhoneNumber@@&failure=http://www.era.pl&success=http://rozrywka.era.pl&mms=false&&message=@@Text@@
  3. Po zapisaniu ustawień, wybierz z listy dodanego usługodawcę i podaj login oraz hasło do bramki sponsorowanej.
  4. W powiadomieniach o alertach zaznacz powiadomienia SMS, a w ustawieniach powiadomień wprowadź numer telefonu.

Play
Bramka Play24
  1. Na serwerze Web obsługującym PHP (i curl) umieść poniższy kod sms.p4-play24.php
    PHP:
    <?php
    /**
     * @author      Michell Hoduń
     * @copyright   (c) 2010 Michell Hoduń <mhodun@gmail.com>
     * @description Klasa odpowiedzialna za wysyłanie SMS-ów z play.pl.
     */
    
    class PlayMobile {
    
     /**
      * Wspomagacz dla CURL'a - ułatwienie dostępu
      *
      * @param string $url
      * @param array $post
      * @param string $ref
      * @param integer $follow
      * @param integer $header
     */
     public static function curl ($url, $post = NULL, $ref = NULL, $follow = 1, $header = 1, $post_type = NULL)
     {
        $ch = curl_init ($url);
        
        curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7');
        curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
        
        // Zapisywanie ciastek do pliku
        curl_setopt($ch,CURLOPT_COOKIEJAR, dirname(__FILE__).'/cookie.txt');
        curl_setopt($ch,CURLOPT_COOKIEFILE, dirname(__FILE__).'/cookie.txt');
        
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        
        if ( ! empty($post))
        {
          $postVars='';
    
          foreach ($post as $option => $value)
            $postVars .= $option.'='.urlencode($value).'&';
    
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $postVars);
        }
          
        if($ref)
          curl_setopt($ch, CURLOPT_REFERER, $ref);
        
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_HEADER, 1);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, $follow);
        
        $r = curl_exec($ch);
        curl_close($ch);
        
        return $r;
      }
      
     /**
      * Funkcja odpowiedzialna za zalogowanie się konto + zalogowanie do bramki.
      *
      * @param string $login
      * @param string $password
      */
      public function DoLogin ($login, $password)
      {
        $BeforePost = array('SAMLRequest' => $this->GetGateway(), 'target'=> 'https://bramka.play.pl');
        
        $content = $this->curl('https://logowanie.play.pl/p4-idp2/SSOrequest.do', $BeforePost, 'https://bramka.play.pl/composer/public/mmsCompose.do');
        
        preg_match('/name="random" value="(.+?)"/', $content, $rand);
        $post = array('step' => 1, 'next' => 'Next', 'random' =>$rand[1], 'login' =>$login, 'password' =>$password);
        
        // Właściwe zalogowanie się
        $LoginDO = $this->curl('https://logowanie.play.pl/p4-idp2/Login.do',$post,'',0);
    
    
        $samlLog_Post = array('SAMLResponse' => $this->SAMLResponse($LoginDO), 'target'=>'https://bramka.play.pl');
        $this->curl('https://bramka.play.pl/composer/samlLog?action=sso', $samlLog_Post, 'https://logowanie.play.pl/p4-idp2/SSOrequest.do');
        
        return $this->curl('https://bramka.play.pl/composer/j_security_check', $samlLog_Post, 'https://bramka.play.pl/composer/samlLog?action=sso');
      }
    
     /**
      * Pobierz "SAMLRequest" - wymagane do zalogowania.
      *
      * @return $SAMLRequest
      */
      public function GetGateway()
      {
        $SAML = $this->curl('https://bramka.play.pl/composer/public/mmsCompose.do', NULL, '', 0, 0);
        
        // Wyszukaj SAMLRequest
        preg_match('/value="(.*)"/msU',$SAML,$w);
        
        $SAMLRequest = $w[1];
        
        // Zwróć
        return $SAMLRequest;
      }
      
     /**
      * Wyciągnięcie SAMLResponse z stringa (treści strony).
      *
      * @param string $content
      */
      public function SAMLResponse ($content)
      {
        preg_match('/value="(.*)"/msU', $content, $w);
        return trim($w[1]);
      }
      
      public function SendSMS ($odbiorca, $tresc)
      {
        $content = $this->curl('https://bramka.play.pl/composer/public/editableSmsCompose.do');
        
        // Wyciągnij kod 'zabezpieczający'
        preg_match('/name="randForm" value="(.+?)"/', $content, $rand);
        
        $SMS = array('recipients' => $odbiorca, 'content_in' => $tresc, 'czas' => 0, 'sendform' => 'on', 'randForm' => $rand[1], 'old_signature' => '', 'old_content' => $tresc,'content_out' => $tresc);
      
        $content2 = $this->curl('https://bramka.play.pl/composer/public/editableSmsCompose.do', $SMS);
        
        $SMS['SMS_SEND_CONFIRMED'] = 'Wyślij';
        $content3 = $this->curl('https://bramka.play.pl/composer/public/editableSmsCompose.do', $SMS);
        
        if (preg_match('/Wiadomo(.*) zosta(.*)a wys(.*)ana/',$content3))
        {
          // Wiadomość została wysłana poprawnie
          return TRUE;
        }
        else
        {
          // Wiadomość nie została wysłana - wystąpił błąd podczas jej wysyłania.
          return FALSE;
        }
      }
    }
    
    // defs
    $login = 'username';
    $password = 'password';
    $number = '';
    $content = '';
    
    if ($_GET['login'] != "") {
        $login = $_GET['login'];
    }
    
    if ($_GET['password'] != "") {
        $password = $_GET['password'];
    }
    
    if ($_GET['number'] != "") {
        //$number = '+'.$_GET['number'];
        $number = $_GET['number'];
    }
    
    if ($_GET['message'] != "") {
        $content = $_GET['message'];
    }
    
    echo "<pre>
    -------------------------------------------------------------------------------
    login   : ". $login ."
    password: <secret>
    number  : ". $number ."
    message : 
    ". $content ."
    -------------------------------------------------------------------------------\n";
    
    // Zaladowanie obiektu
    $play = new PlayMobile();
    // Zalogowanie sie na konto Play
    $play->DoLogin($login, $password);
    
    if($play->SendSMS($number, $content))
    {
    	echo "Status (0): Message sent! \n";
    }
    else
    {
    	echo "Status (127): Unknown or un'def error. \n";
    }
    
    echo "-------------------------------------------------------------------------------
    </pre>";
    
    ?>
    Download: http://pool.qnapclub.pl/projects/tools/smsc-poland-26006/sms.p4-play24.zip
  2. W ustawieniach serwera SMSC dodaj usługodawcę "p4-play24"
  3. Jako szablon tekstowy URL wpisz poniższy link podmieniając adres i ścieżkę na własną lub korzystaj z podanej:
    Code:
    http://pool.qnapclub.pl/projects/tools/smsc-poland-26006/sms.p4-play24.php?login=@@UserName@@&password=@@Password@@&number=@@PhoneNumber@@&message=@@Text@@
  4. Po zapisaniu ustawień, wybierz z listy dodanego usługodawcę i podaj login oraz hasło do bramki SMS Play24.
  5. W powiadomieniach o alertach zaznacz powiadomienia SMS, a w ustawieniach powiadomień wprowadź numer telefonu.

Gadu-Gadu
Gateway

  1. W swoim komunikatorze Gadu-Gadu, dodaj nowy kontakt numer 48280073 (qLog-IM).
  2. Będąc dostępnym, napisz do bota wiadomość o treści ZAPISZ.
  3. Zaloguj się do panelu zarządzania serwerem QNAP i w ustawieniach powiadomień, przejdź do konfiguracji serwera SMSC. Następnie dodaj nowego usługodawcę "Gadu-Gadu".
  4. Jako szablon tekstowy URL wpisz poniższy link:
    Code:
    http://pool.qnapclub.pl/projects/tools/bot-im-gadugadu/bot.php?message=@@Text@@&number=@@PhoneNumber@@
  5. Po zapisaniu ustawień, wybierz z listy dodanego usługodawcę. Pola nazwa użytkownika oraz hasło pozostaw puste.
  6. W powiadomieniach o alertach zaznacz powiadomienia SMS, a w ustawieniach powiadomień zamiast numeru telefonu podaj swój numer Gadu-Gadu.
  7. Od tej pory powiadomienia o alertach będziesz otrzymywał na Gadu-Gadu.
 
Last edited:

qckm

Entry Technician
Q Associate
Mar 27, 2010
88
5
8
QNAP
TS-809 Pro
Ethernet
1 GbE
Właśnie skonfigurowałem bramkę Orange, wiadomości są przekazywane do Mbox'a widnieją jako wysłane ale ... Nie dochodzą.

Problemem jest prefix kraju (48) w przypadku polski. Zrobiłem test i z prefixem wiadomości nie dochodzą a bez niego wszystko działa idealnie.

W interfejsie QNAP'a trzeba wybrać prefix kraju, rozwiązanie pośrednie to znalezienie prefixu zaczynającego się na nr z początku naszego nr telefonu, sprawdziłem i dochodzą bez problemu. :)

Czy jest jakaś opcja aby ominąć prefix i pozostawić sam nr ?

Ja tam początek swojego nr znalazłem ale może komuś się nie uda i lipa z tak piknej konfiguracji bramki ;)
 
Last edited:

qckm

Entry Technician
Q Associate
Mar 27, 2010
88
5
8
QNAP
TS-809 Pro
Ethernet
1 GbE
Nie, to 48 - prefix jest powodem nie działania skrzynki.

Przykładowo, Twój nr telefonu to 555 555 555.
Wybierasz kraj PL (+48). Nr, który wpada do mboxa wygląda tak 48555555555 i nie dochodzi

Jak znajdziesz kraj z prefixem +555 to podajesz nr 555555 i do mboxa jest raportowany nr 555555555, czyli taki jak powinien być i ten dochodzi.
 

Silas Mariusz

SysOp
Administrator
Apr 5, 2008
9,144
7
1,803
153
37
www.devspark.pl
QNAP
TS-x77
Ethernet
1 GbE
A spróbuj wywołać skrypt w sposób:
Code:
http://pool.qnapclub.pl/projects/tools/smsc-poland-26001/sms.plus-bsm.php?login=LOGIN&password=PASS&number=NUMER&message=test&sender=NAS
ale w zamian za LOGIN, PASS oraz NUMER podaj parametry wymagane. I powiedz czy musiałeś podać prefix w NUMER czy nie...
 
Last edited:

qckm

Entry Technician
Q Associate
Mar 27, 2010
88
5
8
QNAP
TS-809 Pro
Ethernet
1 GbE
Zmiennej @@PhoneNumber@@ nie można podmienić. Jak podmienisz to nie akceptuje zmian. Zmienne loginu i hasła można ustalić na sztywno.
 

Silas Mariusz

SysOp
Administrator
Apr 5, 2008
9,144
7
1,803
153
37
www.devspark.pl
QNAP
TS-x77
Ethernet
1 GbE
Zmiennej @@PhoneNumber@@ nie można podmienić. Jak podmienisz to nie akceptuje zmian. Zmienne loginu i hasła można ustalić na sztywno.
Mam na myśli, abyś wywołał z przeglądarki i sprawdził jaki format numeru musisz podać.

A w tym sktypcie do wysylki nie mozna obrobic numer ?
Da się da :) Tylko trzeba mieć konto w Orange ... A ja nie mam ;-)
 

Silas Mariusz

SysOp
Administrator
Apr 5, 2008
9,144
7
1,803
153
37
www.devspark.pl
QNAP
TS-x77
Ethernet
1 GbE

qckm

Entry Technician
Q Associate
Mar 27, 2010
88
5
8
QNAP
TS-809 Pro
Ethernet
1 GbE
-------------------------------------------------------------------------------
login :
password:
number :
message :

-------------------------------------------------------------------------------
Wiadomość została wysłana prawidłowo. W tym miesiącu pozostało do wykorzystania: 28 wiadomości SMS.
-------------------------------------------------------------------------------

No tak musi gadać, przeca prefix dodaje nas a nie strona.
 

rithien

SysBob
Beginner
Dec 26, 2010
151
74
18
Chrząszczyżewoszyce powiat Łękołody
biospassword.eu
QNAP
null
Ethernet
1 GbE
Serwer masz na mysli qnap ?
Jezeli tak to w skrypcie ktory udostepnil Mariusz zamiast tego:
PHP:
if ($_GET['number'] != "") {

    $conf["number"] = $_GET['number'];
wstaw to:
PHP:
if ($_GET['number'] != "") {

    $conf["number"] = substr($_GET['number'], -9);

Lub wpisz numer na stale do arraya i wywal pobieranie z $_GET
 
  • Like
Reactions: Silas Mariusz

qckm

Entry Technician
Q Associate
Mar 27, 2010
88
5
8
QNAP
TS-809 Pro
Ethernet
1 GbE
Czyli ta zmiana w skrypcie pobierze tylko 9 cyfr bez prefixu ?
 

qckm

Entry Technician
Q Associate
Mar 27, 2010
88
5
8
QNAP
TS-809 Pro
Ethernet
1 GbE
Kłopot taki, że zapisy Twoje odnoszą się do Plus'a a ja rozmawiam cały czas o Orange.
 

qckm

Entry Technician
Q Associate
Mar 27, 2010
88
5
8
QNAP
TS-809 Pro
Ethernet
1 GbE
Ja tez rozmawiam o orange
Po prostu znajdz te wpisy w skrypcie dotyczacym orange i zmien je na takie jak podalem

Hint: linia 66,67
Code:
if ($_GET['number'] != "") {
    $number = $_GET['number'];

Nie biegły z tych języków ale to nie wygląda tak samo to napisałeś.
 

rithien

SysBob
Beginner
Dec 26, 2010
151
74
18
Chrząszczyżewoszyce powiat Łękołody
biospassword.eu
QNAP
null
Ethernet
1 GbE
Status
The first post in this thread is a WikiPost, and can be edited by anyone with the appropriate permissions.