Skrypt do wysyłki SMS poprzez bramkę Miasta Plusa (Plus GSM)
2010-03-07 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ą.
<?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(239) . chr(191) . chr(191)
);
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',
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'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/plain; charset=utf-8'
);
$s = $conf["separate"];
$sms =
"3".$s."0".$s."11".$s."http://www1.plus.pl/bsm/".$s."0C1263E2047195AA1A9BA7FDDF8A4B74".$s.
"pl.plus.map.bsm.gwt.client.service.SendSmsService".$s."send".$s.
"pl.plus.map.bsm.core.gwt.dto.MessageTO".$s.
"pl.plus.map.bsm.core.gwt.dto.MessageTO/2025876352".$s."638fe7871b8f5e6bcb4e3fc6a44a69ce".$s.
$conf["message"].$s.$conf["number"].$s.$conf["login"].$s.
$s."1".$s."2".$s."3".$s."4".$s."1".$s."5".$s."6".$s."0".$s."0".$s."7".$s."0".$s."0".$s."8".$s."0".
$s."0".$s."1".$s."2".$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."9".$s."0".$s."0".$s."0".$s."10".$s."0".$s."0".$s."11".$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;
}
}
/**
* 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: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.

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?