Instruktaż/Tutorial Serwer SMSC - Powiadomienia o alertach (Bramki SMS/Gadu-Gadu)

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:
    Kod:
    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:
    Kod:
    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:
    Kod:
    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:
    Kod:
    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:
    Kod:
    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:
    Kod:
    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.
 
Ostatnio edytowane:
-------------------------------------------------------------------------------
login :
password:
number :
message :

-------------------------------------------------------------------------------
[ERROR] Niepoprawny numer telefonu.-------------------------------------------------------------------------------


Coś mi się wydaje, że nie zrozumieliście do końca problemu.

Po tej modyfikacji do nr telefonu jest doklejany "+" co jest zbędne, jak widać nie działa i nie było przedmiotem sprawy.

Problem cały czas leży po stronie qnap'a i jego przekazywaniu nr który składa się z kodu kraju oraz podanego nr telefonu.

MBOX natomiast wysyła wiadomości na nr w formacie XXX XXX XXX a w formacie z prefixem XX XXX XXX XXX nie wysyła wiadomości.


Pytanie brzmi jak zmusić qnapa, żeby nie dodawał kodu kraju do nr telefonu ?
Lub co zmienić w skrypcie żeby pobierał 9 cyfr z prawej strony, takie rozwiązanie w zupełności by wystarczyło.
 
@rithien czy znajdziesz chwilkę aby dopisać do tego skryptu debug, który będzie zapisywać wywołania wraz z podanymi parametrami do pliku? Moglibyśmy w ten moment sprawdzić jak podawany jest numer telefonu i znaleźć tutaj prawidłowe rozwiązanie umożliwiające wysyłanie powiadomień na numery zagraniczne.
 
Mam takowy zrobiony
Qnap dostawia do numeru nie +48 tylko samo 48
Wychodziłem z załozenia ze bramka powinna przyjac prefix z plusemJeżeli ktoś chce zamiast powiadomień sms, otrzymywać powiadomienia na gg
to:
w ustawieniach "Serwer SMSC" wpisać w pole "Szablon tekstowy URL"
Kod:
http://pool.qnapclub.pl/projects/tools/bot-im-gadugadu/bot.php?message=@@Text@@&number=@@PhoneNumber@@

w Powiadomienia o alertach -> ustawienia powiadomień sms
jako telefon komórkowy należy podać numer gadu-gadu
Zaznaczyc ptaka przy SMS

UWAGA! Aby bot mógł wysłać wiadomość do użytkownika, to użytkownik musi nawiązać kontakt i przynajmniej jeden raz napisać na numer gg:48280073
(polityka antyspamowa gg)
 
Ostatnio edytowane przez moderatora:
  • Wow
Reakcje: Silas Mariusz
Szkoda tylko, że nie można doprecyzować rodzaju przekazywanych informacji z serwera.
 
FYI. Pracujemy nad tym. :Dumny:

Będę chciał zrobić system przekazujący bieżącą aktywność serwera (w tym logi połączeń pozbawione duplikatów) ;) ...do api bota, którego zmajstrował maestro @rithien. Wielkie brawa dla niego za tego wspaniałego bocika! :eek:klaski:

Nie wspominając o ukrytej komendzie "test" 3:), którą powalił mnie na kolana ... ze śmiechu :lol:
 
Bot a wysyłanie logów to 2 rożne sprawy.
Do bota komunikacja musi być w 2 strony czyli serwer www widoczny na zewnatrz.
Czyli jak ktoś chce dostać status serwera czy sterować nasem to tak, fajna sprawa
Jak ktoś ma ochotę podłubać to mogę udostępnić

Do wysyłania logów wystarczy np ekg i prosty skrypt, lub zarejestrowanie bota i wykorzystywanie tylko części funkcjonalności

@silas to co ci wysłałem to okrojona część rssfeedera, bez mysqla, userow, itp
 
Tak, ale czy w EKG będę mógł ustalić jakieś presety, np.: stworzyć komendę mute, która spowoduje wyciszenie powiadomień na 5min?
Jeśli rozdłubie poprawnie logi połączeń, to będę mógł je nawet wyeksportować do XML'a RSS. Jednak wolałbym nasłuchiwać bazę z logami i przekazywać aktywność na bieżąco z opóźnieniem 10 sekundowym, w którym jeśli trafią kolejne linie, to aby pchał jako całóść. NVM głośno myśle :)
 

Użytkownicy znaleźli tą stronę używając tych słów:

  1. Logman