Grundaufbau
Ein SMS-Modul bekommt ein eigenes Verzeichnis unter modules/sms. In diesem Verzeichnis muss sich eine PHP-Datei mit dem gleichen Namen wie das Verzeichnis und der Endung .php befinden. In dieser PHP-Datei wird eine Klasse definiert, die von der Klasse SMSProvider erbt.
Attribute
Es werden mehrere Attribute innerhalb der erstellten Klasse benötigt, die höchstens protected sein dürfen:
- $short gibt den Kurznamen des Moduls an, das entspricht dem Verzeichnis- bzw. Dateinamen
- $name gibt einen Anzeigenamen für das Modul an
- $version definiert die Version des Moduls
Methoden
Folgende Methoden können definiert werden:
- getSettings() gibt die verfügbaren Modul-Einstellungen als Array zurück - auf sie kann nachher über das Objekt (stdClass) $this->options zugegriffen werden
- getTypes() soll ein Array verfügbarer SMS-Typen und die dazugehörigen Typen zurückgeben, die implementiert werden müssen
- sendMessage($recipient, $message, $type) erhält die Empfängernummer, die Nachricht und den SMS-Typen - diese Methode veranlasst sodann den Versand der SMS
Beispiel-Code
<?php class SMSKaufen extends SMSProvider { protected $short = "smskaufen"; protected $name = "SMSkaufen.com"; protected $version = "1.0"; public function getSettings() { return Array( "sender" => Array("type" => "text", "name" => "Absender", "help" => "11-16 Ziffern oder 11 Zeichen (je nach Typ)"), "skid" => Array("type" => "text", "name" => "Benutzername"), "skpw" => Array("type" => "password", "name" => "Passwort", "help" => "Alternativ den API-Schlüssel angeben"), "skkey" => Array("type" => "password", "name" => "API-Schlüssel"), "hint" => Array("name" => "Hinweis", "help" => "Bei SMSkaufen muss die IP-Whitelist für die API überprüft werden.", "type" => "hint"), ); } public function sendMessage($recipient, $message, $type = 0) { if (!array_key_exists($type, $this->getTypes())) { return false; } $url = "https://www.smskaufen.com/sms/gateway/sms.php"; $p = Array( "id" => $this->options->skid, "type" => $type, "empfaenger" => $recipient, "absender" => $this->options->sender, ); if (!empty($this->options->skkey)) { $p['apikey'] = $this->options->skkey; } else { $p['pw'] = $this->options->skpw; } $message = urlencode(utf8_decode($message)); $c = curl_init($url . "?" . http_build_query($p) . "&text=" . $message); curl_setopt($c, CURLOPT_RETURNTRANSFER, true); curl_setopt($c, CURLOPT_FOLLOWLOCATION, true); curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false); $r = curl_exec($c); curl_close($c); if ($r != "100") { $codes = Array( "112" => "Zugangsdaten ungültig", "122" => "Fehler bei Übergabe", "123" => "Datei nicht vorhanden", "124" => "Fehlerhafter Parameter art", "125" => "Fehler beim Verbindungsaufbau", "140" => "Guthaben nicht ausreichend", "160" => "Benutzer gesperrt", ); if (array_key_exists($r, $codes)) { return $codes[$r]; } if (!empty($r)) { return strval($r); } return false; } return true; } public function getTypes() { return Array( "3" => "Discount-SMS (DE)", "4" => "Premium-SMS (DE)", "8" => "Premium-SMS (weltweit)", ); } }