SMS-Module erstellen

Aus sourceDESK Wiki
Version vom 10. Oktober 2018, 10:36 Uhr von Richard Reiber (Diskussion | Beiträge)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

Sie können ein eigenes SMS-Modul erstellen, um einen neuen SMS-Anbieter an sourceDESK anzubinden.

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&uuml;ssel angeben"),
			"skkey" => Array("type" => "password", "name" => "API-Schl&uuml;ssel"),
			"hint" => Array("name" => "Hinweis", "help" => "Bei SMSkaufen muss die IP-Whitelist f&uuml;r die API &uuml;berpr&uuml;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&uuml;ltig",
				"122" => "Fehler bei &Uuml;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)",
		);
	}
}