SMS-Module erstellen: Unterschied zwischen den Versionen

Aus sourceDESK Wiki
Wechseln zu: Navigation, Suche
(Die Seite wurde neu angelegt: „== Grundaufbau == ... == Methoden == ...“)
 
 
Zeile 1: Zeile 1:
 +
Sie können ein eigenes [[SMS]]-Modul erstellen, um einen neuen [[SMS]]-Anbieter an sourceDESK anzubinden.
 +
 
== Grundaufbau ==
 
== 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 ==
 
== 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 ==
 +
<source lang="php">
 +
<?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)",
 +
);
 +
}
 +
}
 +
</source>

Aktuelle Version vom 10. Oktober 2018, 08:36 Uhr

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)",
		);
	}
}