Marusz Logo
Strona główna
Artykuły
Seriale, daty premier
Kontakt
Promowane artykuły:
Dreamhost i czas warszawski
WinBinder - wprowadzenie
Prosty packer CSS
Zend Studio i Ubuntu
Oficjalny dystrybutor MOTOmed
WebMail Claros Software
Miasto Plusa - bramka napisana w PHP
Płatnik na Laptopie - opis instalacji
Płatnik - przeniesienie programu
Captcha w PHP - prosty przykład
Linux, skrypt txt2srt
Windows, prosta konwersja txt2srt
Linux, NapiProjekt, TXT i SRT

Skrypt do wysyłki SMS poprzez bramkę Miasta Plusa (Plus GSM)

2011-02-01 09:07

Jakiś czas temu Plus GSM całkowicie zmienił sposób obsługi wiadomości tekstowych rozsyłanych przez formularze dostępne w Mieście Plusa. Mój skrypt, który popełniłem w roku 2007, się rozsypał, więc postanowiłem spłodzić nowy. Całość pisana jest na kolanie i wymaga pewnikiem szeregu poprawek, niemniej smsy dochodzą - czego chcieć więcej? ;)

I jeszcze jedno. Skrypt ten wymaga podstawowej wiedzy i znajomości języka PHP. Proszę Was, googlujących tu i ówdzie, nie piszcie do mnie pytań typu: "co mam z tym zrobić?", albo tekstów w stylu "skopiowałem twój skrypt na pulpit, jak go odpalić?". W innych kwestiach służę pomocą.

Aktualizacja: 2012-02-01



<?php

$conf 
= array (
    
"login" => "twój login",
    
"password" => "twoje hasło",
    
"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($cCURLOPT_URL"https://www1.plus.pl/sso/logowanie/auth");
    
curl_setopt($cCURLOPT_POSTtrue);
    
curl_setopt($cCURLOPT_POSTFIELDSimplode("&"$post));
    
curl_setopt($cCURLOPT_COOKIEFILE$conf["cookiepath"]);
    
curl_setopt($cCURLOPT_COOKIEJAR$conf["cookiepath"]);
    
curl_setopt($cCURLOPT_USERAGENT$conf["useragent"]);
    
curl_setopt($cCURLOPT_TIMEOUT$conf["timeout"]);
    
curl_setopt($cCURLOPT_FOLLOWLOCATIONtrue);
    
curl_setopt($cCURLOPT_RETURNTRANSFERtrue);
    
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["login"].
        
$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($cCURLOPT_URL"http://www1.plus.pl/bsm/service/SendSmsService");
    
curl_setopt($cCURLOPT_POSTtrue);
    
curl_setopt($cCURLOPT_POSTFIELDS$sms);
    
curl_setopt($cCURLOPT_HTTPHEADER$header);
    
curl_setopt($cCURLOPT_REFERER"http://www1.plus.pl/bsm/");
    
curl_setopt($cCURLOPT_COOKIEFILE$conf["cookiepath"]);
    
curl_setopt($cCURLOPT_COOKIEJAR$conf["cookiepath"]);
    
curl_setopt($cCURLOPT_USERAGENT$conf["useragent"]);
    
curl_setopt($cCURLOPT_TIMEOUT$conf["timeout"]);
    
curl_setopt($cCURLOPT_FOLLOWLOCATIONtrue);
    
curl_setopt($cCURLOPT_RETURNTRANSFERtrue);
    
$return curl_exec($c);
    
curl_close($c);

    if (
preg_match("/java\.util\.Date/"$return))
    {

        return 
true;

    }
    else
    {

        return 
false;

    }

}

/**
 * Przyklad uzycia skryptu
 */

$conf["number"] = "100000000";
$conf["message"] = "tresc wiadomosci";

if (
sendSMS())
{

    echo 
"wiadomosc wyslana poprawnie";

}
else
{

    echo 
"wystapil blad...";

}

?>



Enjoy!

Komentarze

limak @ 83.15.80.*

wysłany: 2010-03-19 00:46

Mam błąd w linikjach z:
curl_setopt($c, CURLOPT_FOLLOWLOCATION, true); //usunięcie tej linijki nie powinno niczym skutkować, bo tak samo miałem na bramce orange i działa bez tego :)
po usunięciu i tak funkcja zwraca "wystapil blad..."
Czy bramka przypadkiem nie działa tylko pod Twoim loginem?

limak @ 83.15.80.*

wysłany: 2010-03-19 00:51

znalazłem błąd:
curl_setopt($c, CURLOPT_URL, "https://www1.plus.pl/sso/logowanie/auth");
trzeba zamienić na:
curl_setopt($c, CURLOPT_URL, "http://www1.plus.pl/bsm/auth");
pozdrawiam i dzięki za skrypt :)

limak @ 83.15.80.*

wysłany: 2010-03-19 01:22

Jednak skrypt cały działa poprawnie, miałem coś źle ustawione. :)

limak @ 83.15.80.*

wysłany: 2010-03-19 01:23

Dodam jeszcze tylko, że skrypt działa nawet jak wpiszemy byle jaki login i hasło, więc logowanie można usunąć.

Marusz @ 78.8.60.*

wysłany: 2010-03-19 08:03

1. to nie jest możliwe, abyś mógł wysłać wiadomość bez logowania się. Jeśli wyrzuciłeś procedurę logowania, to jedyne co może wtedy działać, to standardowa bramka - z limitem smsów i innymi cudami.

2. Jak skrypt przestanie działać, z miejsca o tym poinformuję. Na tą chwilę używam tego dzień w dzień, więc powyższe wypociny MUSZĄ działać poprawnie. Jeśli nie będą działać, sprawdźcie Wasze ustawienia curla, firewalla, php, etc... a na końcu dopiero badajcie skrypt :D Oszczędzicie trochę czasu.

Grins @ 89.74.137.*

wysłany: 2010-04-20 00:48

Racja, nie jest wymagane logowanie do serwisu. Wiadomości są wysyłane z darmowej bramki. Wszystko działa jak natura chciała. Pięknie dziękuje ;)

plus @ 78.8.61.*

wysłany: 2010-05-14 21:17

Plus to śmierdząca skarpetka... z grzybem...

Cuban @ 87.199.17.*

wysłany: 2010-05-18 20:58

Wkleilem caly kod w dokument php i jedyne co widze po wejsciu na strone to

"wystapił bład..."

Marusz @ 78.8.235.*

wysłany: 2010-05-19 17:49

Powodów błędu może być kilka: zły login, złe hasło, zły numer wiadomości. Skrypt przed odpaleniem trzeba skonfigurować.

Używam DOKŁADNIE tej kopii cały czas (i dostaję non stop potwierdzenia, że nie tylko ja) i działa. Zawsze.

Adrian @ 213.195.156.*

wysłany: 2011-01-06 18:43

To nie do konca tak jak ten uzytkownik napisal: ''Racja, nie jest wymagane logowanie do serwisu. Wiadomości są wysyłane z darmowej bramki. Wszystko działa jak natura chciała'' gdyz wczesniej mial ustawiony login i haslo i cookie zapisalo to sobie i po usunieciu loginu bedzie dzialac na ustawieniach zapisanych wczesniej w cookie.

shadow @ 79.184.190.*

wysłany: 2011-08-01 01:13

prawdopodobnie czegoś nie zauważyłem ale gdzie jest funkcja " $c = curl_init();" ? kiedy podpiąłem skrypt otrzymuje błąd w tej linijce.

do shadow @ 78.8.49.*

wysłany: 2011-08-08 11:11

masz PHP skompilowane bez obsługi CURLa

Bringo @ 83.28.176.*

wysłany: 2011-08-08 12:43

Żeby zadziałało logowanie musiałem dopisać:

curl_setopt($c, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($c, CURLOPT_SSL_VERIFYHOST, 2);

Może ktoś ma podobny problem i mu to pomoże ;).

Eye @ 77.254.234.*

wysłany: 2012-02-26 18:18

A ja mam takie 2 błędy.

Warning: curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION cannot be activated when in safe_mode or an open_basedir is set in /home/theeye84/public_html/bramka/skrypt.sms.php on line 34

Warning: curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION cannot be activated when in safe_mode or an open_basedir is set in /home/theeye84/public_html/bramka/skrypt.sms.php on line 79
wystapil blad...

do Eye @ 78.10.100.*

wysłany: 2012-02-27 11:50

no to jak głosi komunikat: wyłącz safe_mode w php.ini i będzie dobrze

Xmen @ 94.40.120.*

wysłany: 2012-02-28 21:24

działa bez problemów - tego szukałem przez parę dobrych godzin... Jaki jest limit wiadomości?

Marusz @ 78.10.103.*

wysłany: 2012-02-29 14:44

Tak. Ale nikt nie mówi o tym limicie oficjalnie: rzekomo 50 wiadomości z jednego IP dziennie, ale są też głosy, że 50 wiadomości na jeden numer telefonu dziennie.

Xmen @ 94.40.120.*

wysłany: 2012-02-29 15:29

sprawdzilem na jeden numer rzeczywiscie jest to ok 50 wiadomosci. Tylko czy dlugosc wiadomosci ma znaczenie w przeliczaniu? zdaje mi się, że nie ponieważ wysylalem te okolo 50 wiadomosci z dlugoscia znakow na 2 lub 3 smsy

Xmen @ 94.40.120.*

wysłany: 2012-02-29 17:24

jednak jest limit gdzieś około 50 wiadomosci. Po wykorzystaniu limitu nie mozna wyslac do zadnego innego numeru w sieci plus sms-a. Zapewne po 24h odblokują. Zauwazylem, ze jesli zmienie sobie haslo i login do plusa na inny i tak to nic nie daje blokują chyba IP. W moim przypadku jednak limit nie będzie przeszkadzał, ale informacje te są pewnie i cenne dla niektórych.

Unr3al2 @ 212.76.45.*

wysłany: 2012-11-03 15:09

Działa wam jeszcze ta bramka ??

heh @ 78.8.46.*

wysłany: 2012-11-03 23:38

działa cały czas, przecież ciągle jest aktualizowana!

San @ 78.30.100.*

wysłany: 2013-04-23 15:32

no, nie bangla mi. uzupełniłem skrypt o login, hasło, numer i testową treść wiadomości.

zainstalowałem curl'a w php, dodałem opcję by php nie ukrywało żadnych błędów:

error_reporting(E_ALL);
ini_set('display_errors', '1');

na początku pliku, za

San @ 78.30.100.*

wysłany: 2013-04-23 15:36

Dziabło mi za znacznikiem otwarcia php.

Zastosowałem radę Bringo, uzupełniłem przykład (a, na wszelki wypadek). Touch cookies.txt i chmod 777.

cookies wygląda tak:
# Netscape HTTP Cookie File
# http://curl.haxx.se/rfc/cookie_spec.html
# This file was generated by libcurl! Edit at your own risk.

www1.plus.pl FALSE / FALSE 0 www1_plus_pl_c1 R1980143204
www1.plus.pl FALSE /sso/logowanie FALSE 0 JSESSIONID 0000ddZFldtm2K7kHj9zR7t1CM0:14ei5b7d5
www1.plus.pl FALSE / FALSE 1367 [cut] 50 stick H
#HttpOnly_www1.plus.pl FALSE / FALSE 0 PD-H-SESSION-ID 1_rLo+vjnkWtnAkRHP0MQdqQDS1e6cyb05YYGMgZADlGbfc5Jk7 [cut] AAAAAAE [cut] UKO2PXSyNRqNhl+CGEr8blgr98=
www1.plus.pl FALSE / FALSE 0 www1.plus.pl.c1 R34 [cut] 5311
www1.plus.pl FALSE / FALSE 0 JSESSIONID 00007MIiL22g [cut] 2p01kio

Jak wybadać czy problem jest z logowaniem czy samym wysyłaniem sms?

Marek @ 78.8.42.*

wysłany: 2013-04-25 07:10

Sprawdź co się dzieje dodając print_r($return) przed linijką:

if (preg_match("/java.util.Date/", $return))

Dodam, że skrypt poprawnie działa, więc być może Twój serwer czy router blokuje połączenie? W każdym razie, podstawą jest sprawdzenie co odpowiedział serwer. Sprawdź, wklej, pomyślimy.

San @ 89.78.43.*

wysłany: 2013-04-25 10:35

wierzę, że to coś u mnie, ale nie mam pojęcia co to może być. Na serwerze mogę zmienić wszystko, tylko muszę wiedzieć co.

to co zwraca plus:

//EX[0,1,["pl.plus.map.bsm.core.gwt.exception.filter.ForbiddenSmsContentException/3244390296"],0,7]wystapil blad...

w wiadomości BYŁO: "luter"
zmieniłem na: "jestem ciastkiem"

tajemnicze...

San @ 89.78.43.*

wysłany: 2013-04-25 10:38

dodam, że taka wiadomość z bramki wychodzi i login/hasło zostały parę razy sprawdzone

Marek @ 78.8.42.*

wysłany: 2013-04-25 20:44

O proszę - informacja zwrotna brzmi mówi, że użyłeś niedozwolonego słowa. Ustaw proszę w treści smsa tylko prostą sentencję: test wiadomosci

San @ 78.30.96.*

wysłany: 2013-04-26 03:41

"w wiadomości BYŁO: "luter"
zmieniłem na: "jestem ciastkiem" "

a teraz zmieniłem na "test wiadomosci"
(bez polskich znaków)
i wyskakuje to samo.

San @ 78.30.96.*

wysłany: 2013-04-26 04:02

Przepraszam, że znowu piszę komentarz pod komentarzem, ale, żeby nie pojawiły się już żadne nieporozumienia, to jest link symboliczny do php, którego serwer nie wykonuje:

http://www.e-san.info/plus.txt

a plik plus-pass.php wygląda JAKOŚ tak:



Dzięki za pomoc, mam nadzieję, że w końcu się uda ;)

San @ 78.30.96.*

wysłany: 2013-04-26 04:03

[znacznik php]
$conf["login"] = "takata@takam.pl";
$conf["password"] = "1234567890";
$conf["number"] = "607666661";
[pytajnik]

Marek @ 78.8.45.*

wysłany: 2013-04-26 07:04

Więc słuchaj, tutaj masz skrypt w całości, niepokolorowany, więc wklej go sobie do pliku PHP:
http://marusz.net/poligon/sms/sms_miastoplusa.phps

Zmień tylko 3 rzeczy, nie tykaj nic więcej, mianowicie:
- na samej górze zamień "twój login" na login który masz na koncie Plusa
- zamień "twoje hasło" na hasło przypisane do konta Plusa
- oraz zjedź na sam dół i wprowadź swój numer telefonu modyfikując wartość $conf["number"].

I tyle. Reszty nie tykaj, nic nie dodawaj, nic nie kombinuj. Odpal skrypt. Dodatkowo, co zauważyłem, podałeś w swoim przykładzie login w postaci adresu e-mail - jesteś pewien, że to ma tak wyglądać? Moje konto nie ma żadnych znaków specjalnych. Sprawdź, może się coś pozmieniało, ale jest to kolejna rzecz na którą zwróciłem uwagę. Daj znać co i jak.

San @ 89.78.43.*

wysłany: 2013-04-26 16:00

ok! działa.
Problem polegał, rzeczywiście, na loginie. Na stronie plusa można zalogować się poprzez maila, więc zakładałem, że i tu mogę tak zrobić. Nie mogłem. Po zalogowaniu sprawdziłem (przypomniałem sobie) login, zmieniłem i już bangla.

Dziękuję serdecznie!

Marek @ 78.10.104.*

wysłany: 2013-04-27 09:57

Cieszę się, że mogłem pomóc. Pozdrawiam! :)

Radek @ 94.40.120.*

wysłany: 2013-10-09 12:41

Zdaje mi się, że skrypt bramki przestał działać co dzisiaj zauważyłam, a wczoraj przypadkiem byłem na bramce plusa i jej nie wyświetlało więc nie wiem czy czasami nie zrobili jakiś zmian? Panie Marku co Pan o tym myśli?

Radek @ 94.40.120.*

wysłany: 2013-10-09 12:51

Widzę po zalogowaniu się do konta plusa wyłączyli bramkę całkowicie. Ciekawe na jak długo...

Marek @ 78.8.41.*

wysłany: 2013-10-11 08:00

No właśnie, problem leży po stronie Plusa. Wydaje mi się, że to chwilowa awaria, gdyż docelowo Plus musi mieć przecież jakąś bramkę (każdy operator takową posiada) - sam Firefox wyrzuca komunikat o zablokowanych niebezpiecznych treściach (w okolicach paska adresu). Może to jakaś kwestia związana z certyfikatami SSL? No nic, pozostaje nam tylko cierpliwie czekać.

Waldi @ 94.251.204.*

wysłany: 2013-11-02 21:03

Mam pytanie do szanownych kolegów. Czy jest możliwość przebudowy tego skryptu tak aby wciągnąć captche ze strony (bramki) plusa? Chodzi o uzyskanie takiego efektu jak na sms.priv.pl - bramka sms działa i nie ma potrzeby logowania się... chciałbym utworzyć taki max. skromny formularz który wyśle smsa do plusa - bez przekierowywania na ich stronę... ma ktoś na to pomysł ?

do Waldi @ 78.8.41.*

wysłany: 2013-11-04 08:33

Bajer polega na tym, że ten skrypt został napisany tylko i wyłącznie po to, abyś używał swojej bramki osobistej, nie publicznej. Jeśli chcesz sklonować bramkę, którą plus udostępnił pod adresem http://www1.plus.pl/bsm/ to w czym problem? Skopiuj ich kod ze strony WWW i tyle.

Waldi @ 94.251.204.*

wysłany: 2013-11-05 08:22

Właśnie problem w tym że nie działa (samo skopiowanie)... - captcha za każdym razem jest inna (adres do niej) co za tym idzie samo skopiowanie nic nie daje...:/. Chociaż na sms.priv "udało" się to zrobić..., ale to pewnie wyższa szkoła jazdy...

Waldi @ 94.251.204.*

wysłany: 2013-11-14 11:06

Czy zrobi to ktoś dla mnie za pieniądze ?

Marek @ 78.8.42.*

wysłany: 2013-11-15 21:58

Za pieniądze powiadasz? Dobra, to ja zrobię. Stwórz na serwerze folder, utwórz plik, na przykład o nazwie bramka.php i wrzuć do niego zawartość tego pliku:

http://marusz.net/poligon/sms/sms_plusgsm.phps

Zapisz wszystko i odpal skrypt. Powinieneś zobaczyć formularz i kod captcha. Wypełnij ładnie wszystkie pola i naciśnij przycisk. Daj znać, czy wszystko działa.

Unr3al2 @ 89.72.81.*

wysłany: 2014-02-06 21:17

Dziękuje za działający skrypt.
Co trzeba zmienić w skrypcie by wiadomości były dodawane do wysłanych, falsh oraz opóźnić wysłanie.

Paweł @ 93.95.90.*

wysłany: 2016-05-16 14:31

Kurcze, coś się zmieniło od kilku dni na bramce plusa. Czy udało się komuś zrobić obsługę obecnej bramki?

Marusz @ 77.254.62.*

wysłany: 2016-05-17 08:19

Paweł, od kiedy zmieniony jest kod bramki? Pytam, bo już nie posiadam telefonu w Plusie.

Jan @ 87.207.108.*

wysłany: 2016-12-27 16:54

Witam czy będzie jakaś aktualizacja gdyż znalazłem błąd, niestety nie wiem jak go rozwiązać. Mianowicie dodając przed linią "if (preg_match("/java.util.Date/", $return))", linię "echo($return);" na stronie wyświetla się błąd Error 405: Method Not Allowed.

do Jana @ 78.10.238.*

wysłany: 2016-12-27 18:27

Prawdopodobnie nie, gdyż nie posiadam już telefonu w sieci Plus.


Wpisz swoje imię, pseudonim:

Wpisz treść: