Die meisten SMS werden nach wie vor von Handy zu Handy versandt. Aber es ist auch möglich, SMS über PHP und das HTTP-Protokoll von einer Webseite oder über eine Software zu versenden.
Die Vorteile davon sind vielfältig. Man kann z.B. Gratis-SMS auf seiner Webseite anbieten, um mehr Traffic dorthin zu lenken.
Es ist auch möglich, SMS als E-mail zu versenden. In diesem Tutorial soll aber ausschließlich der Versand über GET und POST HTTP in PHP behandelt werden.
Dieses Tutorial kann auf jedes SMS-Gateway angewandt werden, welches eine HTTP-Schnittstelle anbietet. Es wurde jedoch speziell für das smstrade.de SMS Gateway erstellt, da sie zum einen eine Simulationsoption bieten, mit der man seine Skripts optimieren kann. Weiterhin verlangen sie keine Setup-Gebühren, bieten generell niedrige Preise und sind sehr zuverlässig.
SMS über HTTP versenden - die Anforderungen an den Gateway
Auf SMS API findet man alle benötigten Angaben, um SMSTRADE benutzen zu können. Grundsätzlich benötigt man 6 Datensätze:
key: persönliche Identifikationskey
message: Inhalt der Nachricht
to: Empfänger
from: Absender
route: Versandroute
Wir fügen noch ein "debug" als 6. Datensatz hinzu, das bedeutet "Testmodus", d.h. es wird kein Geld für diese SMS von unserem Konto abgezogen und sie werden auch nicht abgesandt.
SMS über HTTP versenden - Erstellen des HTTP-Requests
Nun wird der eigentliche Auslieferungsprozess über den Gateway abgewickelt. Dazu muss der Inhalt der SMS noch in eine HTTP-Vorlage umgewandelt werden, wie z.B. diese hier:
http://gateway.smstrade.de/?key=123&to=4917212345&message=Hello+World&route=gold&from=SMSTRADE
Dieses auf GET basierende Beispiel kann man auch testen, indem man es in die Addresszeile seines Browsers einfügt. Man erhält den Wert 50 zurück. Das bedeutet, dass der Userkey invalid ist und ist normal, da es ja nur ein Beispiel zur Demonstration ist.
Als erstes muss man nun die Datensätze als Variable speichern und sie dann in eine URL-Form umwandeln. Dafür gibt es verschiedene Möglichkeiten, die folgende:
01: |
<?php |
Die Datensätze werden in das $param-Array eingegeben. Jeder Parameter muss dann URL-verschlüsselt werden und die Parameter werden durch & getrennt.
Dieses Skript erzeugt folgenden Request, der an das SMS-Gateway gesandt werden kann:
http://gateway.smstrade.de/?key=123&message=Hello+World&to=4917212345&from=Absender&route=gold&debug=1
SMS über HTTP versenden - den Request über file() versenden
Wie eben gesehen, könnte man nun den generierten Request ausgegeben und direkt in den Internetbrowser eingegeben um die Nachricht zu versenden. Die unkomplizierteste Möglichkeit den Request aus dem Script heraus abzusetzen, bietet die Funktion file().
Nachteil: Es stehen keine weiteren Optionen wie bestimmter timeout zur Verfügung.
01: |
<?
|
Zunächst wird der Request via file() abgesetzt. Das @ sollte unbedingt angewendet werden um die Fehlerausgabe zu unterdrücken. Ansonsten wird Ihr Gateway Key unverschlüsselt in der Fehlermeldung angezeigt wenn es mal zu keiner Verbindung zum Gateway kommen sollte.
Gleichzeitig wird die Rückgabe im $response Array gespeichert. Jetzt kann man über die Fehlercodes auslesen ob die SMS erfolgreich versendet wurde oder nicht.
SMS über HTTP versenden - den Request über CURL versenden
CURL bietet eine andere, elegantere Methode, welche im Hintergrund abläuft.
CURL ist eine sehr beeindruckende Library, mit der man über verschiedene Protokolle mit verschieden Servern kommunizieren kann. Weiter Informationen im PHP Manual
Dieser Code öffnet die Verbindung zum Gateway, schickt die SMS und gibt die Rückmeldung aus:
01: |
<?
|
Zunächst wird eine neue CURL-Session eröffnet und die gewünschten Sendeoptionen eingegeben. Dann führen wir den Call aus und schließen das Handle.
Der Response Code kann dann natürlich auch wie bei der file()-Methode ausgewertet werden.
SMS über HTTP versenden - den Request über Sockets versenden
CURL funktioniert nur mit einer externen Library. Um CURL nutzen zu können, muss PHP das "with-curl"-Symbol besitzen. Ansonsten kann der Request auch über Sockets verschickt warden.
01: |
<?
|
Zunächst gibt man die Sendeoptionen an und erstellt damit den HTTP-Header. Die Verbindung zum Gateway über das Socket wird mit fsockopen hergestellt. Das Senden/Empfangen geschieht nach demselben Prinzip wie bei CURL. Nach dem erfolgreichen Transfer schließt man das Socket mit fclose.
SMS über HTTP versenden - Zusammenfassung
Wenn man PHP mit CURL einsetzen kann, dann ist CURL wohl die beste, sauberste und schnelleste Option für den Versand. Die file()-Methode ist mit Abstand am Einfachsten, bietet allerdings nicht alle Funktionen wie bei CURL.