luokka http://oma.saunalahti.fi verkkopalvelun sms - lähetykseen. Ei kommentointia, koodi suht suoraviivainen.
<?php
/**
* 2011 KEAN
**/
class saunasms
{
private $ch;
private $com;
public $viesti = array();
public function __construct($username, $password)
{
if(!isset($username, $password)) {
throw new Exception("Aseta käyttäjänimi ja salasana.");
}
$this->ch = curl_init();
curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($this->ch, CURLOPT_COOKIESESSION, 1);
curl_setopt($this->ch, CURLOPT_COOKIEJAR, "/dev/null");
curl_setopt($this->ch, CURLOPT_POST, 1);
curl_setopt($this->ch, CURLOPT_POSTFIELDS, "login&username=" . $username . "&password=" . $password);
curl_setopt($this->ch, CURLOPT_URL, "https://oma.saunalahti.fi/settings/smsSend");
$this->com = curl_exec($this->ch);
$pos = strpos($this->com, "Kirjautuminen");
if($pos === true) {
throw new Exception("Kirjautuminen oma.saunalahti.fi - verkkopalveluun epäonnistui.");
}
}
public function asetaVastaanottajat($vastaanottajat)
{
$this->viesti["recipients"] = preg_replace("/[^0-9,]/", "", $vastaanottajat);
}
public function lahetaViesti($viesti)
{
if(empty($viesti)) {
throw new Exception("Viestikenttä on tyhjä!? Viestiä ei lähetetty.");
}
if(!isset($this->viesti["recipients"]) OR empty($this->viesti["recipients"])) {
throw new Exception("Aseta vastaanottaja(t), erota pilkulla.");
}
$this->viesti["text"] = $this->EUTF8(substr(trim($viesti), 0, 158));
$post = "recipients=" . $this->viesti["recipients"] . "&text=" . urlencode($this->viesti["text"]) . "&size=" . strlen($this->viesti["text"]);
curl_setopt($this->ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($this->ch, CURLOPT_URL, "https://oma.saunalahti.fi/settings/smsSend?send");
$reply = curl_exec($this->ch);
if(preg_match("/Numero (.*) on virheellinen/", $reply)) {
throw new Exception("Numero on virheellinen.");
}
elseif(preg_match("/" . $this->EUTF8("Viesti lähetetty") . "/", $reply)) {
return true;
}
else {
throw new Exception("Tilapäinen virhe, viestiä ei lähetetty.");
}
}
public function smsData()
{
preg_match("/" . $this->EUTF8("Kuukausittaisia viestejä jäljellä:") . "(.*)<br>/", $this->com, $match);
$data["jaljella"] = trim($match[1]);
preg_match("/" . $this->EUTF8("Lähetettyjä viestejä:") . "(.*)<br>/", $this->com, $match);
$data["lahetetty"] = trim($match[1]);
return $data;
}
public function kirjauduUlos()
{
curl_setopt($this->ch, CURLOPT_URL, "https://oma.saunalahti.fi/settings/Logout");
curl_exec($this->ch);
curl_close($this->ch);
}
private function EUTF8($string)
{
if(mb_check_encoding($string, 'UTF-8')) {
return utf8_decode($string);
}
return $string;
}
}
?>Ja sen käyttö esim:
<?php require("saunasms.class.php"); try { $lahetys = new saunasms("tunnus","salasana"); $lahetys->asetaVastaanottajat("0401234XXX"); if($lahetys->lahetaViesti("Hej på dig, min vän.")) { print ("Viesti toimitettu."); } $lahetys->kirjauduUlos(); } catch(Exception $e) { print $e->getMessage(); } ?>
tai:
<?php require("saunasms.class.php"); try { $lahetys = new saunasms("tunnus","salasana"); // Infoa $data = $lahetys->smsData(); print $data["jaljella"] . " kpl<br />"; print $data["lahetetty"] . " kpl<br />"; $lahetys->asetaVastaanottajat("0405644XXX,0401234XXX,040123XXX"); if($lahetys->lahetaViesti("Hej på dig, min vän.")) { print ("Viesti toimitettu."); } $lahetys->kirjauduUlos(); } catch(Exception $e) { print $e->getMessage(); } ?>
Kiva vinkki, kehittelin taannoin itsekin tekstiviestien lähetystä PHP:llä (Soneran API:n kautta).
Muutama parannusehdotus:
Metabolix kirjoitti:
Käyttäjänimi ja salasana kannattaa myös enkoodata.
Tarpeetonta johtuen saunalahden knimi ja salasana käytännöstä. Mut pieni vaiva toki.
Metabolix kirjoitti:
Viestin katkaisu pitäisi tehdä vasta UTF-8-dekoodauksen jälkeen.
Hyvä huomio, se selittääkin aika paljon :)
Metabolix kirjoitti:
$this->viesti on aivan turha, olisi paljon kätevämpää (ja siistimpää) antaa sekä viesti että numerot suoraan lahetaViesti-funktiolle.
Totta, tjaa a.
Metabolix kirjoitti:
Numerot olisi kiva voida antaa myös taulukkona.
Jos nyt muodot:
$lahetys->asetaVastaanottajat("0401234XXX");
/** Tai **/
$lahetys->asetaVastaanottajat("0405644XXX,0401234XXX,040123XXX");ei kävis, niin voi aina:
$lahetys->asetaVastaanottajat(implode(",", $numerot));
PHP 5.3.5:ssa pitää asettaa
curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, 0);
jotta koodi toimii. Muuten toimii hienosti, kiitos! :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.