Handbuch Versendung von SMS per URL Aufruf über http oder https-Request


 
  1. Parameter für Text-SMS
  2. Statuscodes
  3. Sendeberichte empfangen
  4. Antworten empfangen
  5. Guthabenabfrage
  6. Programmier-Beispiele

Sie können über die Eingabe einer Adresse in Ihrem Browser, bzw. über einen automatischen Aufruf der Adresse

http://www.sms4.de/cgi-bin/sms_out.pl
mit den folgenden Parametern eine SMS versenden:

 

1.) Parameter für Text-SMS

Parameter Beispiel Beschreibung
handynr (Pflicht) handynr=491743333333 Die Zielnummer. Bitte immer mit Ländercode ohne + oder führende Nullen.
user (Pflicht) user=XYZ Ihr SMS4.de Benutzername.
pwd (Pflicht) pwd=XYZ Das Passwort Ihres Benutzers.
kdnr (Pflicht) kdnr=XY12345 Ihre SMS4.de Kundennummer hier kostenlos beantragen
text (Pflicht) text=hier+k%F6nnte+der+Text+stehen Der Text der SMS, 160 Zeichen (ISO-8859-15).
tarif (optional) tarif=1 Bei Tarif ist 1 oder 7 möglich. Details zu den SMS Tarifen finden Sie in der SMS-Preisliste
(Der Vorgabewert ist 1).
absender (optional) absender=Der-Peter
oder:
absender=%20%2B49174210000
oder:
absender=0049174210000
Die Absenderkennnung nur für Tarif 1 und 7:
6 bis 11 Zeichen Text (keine Sonderzeichen) oder 6 bis 14 Ziffern, bei SMS ins Festnetz sind nur Ziffern erlaubt
(Den Vorgabewert können Sie in den Einstellungen angeben).
Ein + für zu Beginn der Absenderkennung wird als %20%2B URL-codiert. Sie könne auch 0049.... verwenden.
sendezeit (optional) sendezeit=20240501354 Hier im Beispiel: SMS Versenden am 01.05.2024 um 13:54 Uhr. Das Format ist JJJJMMDDHHMM. Also Jahr Monat Tag Stunde Minute ohne Leerzeichen, mit führenden Nullen bei Werten <10 und ohne Sekunden. 24 h Format.
v (optional) v=1 Bei v=1 liefert der URL-Aufruf zusätzlich eine eindeutige SMS-Id zurück. Diese Id können Sie z.B. für Nachfragen verwenden (analog der Id in den CSV-Logfiles).
guthaben (optional) guthaben=1 Bei guthaben=1 liefert der URL-Aufruf zusätzlich das aktuelle Restguthaben in Euro (nur für Prepaidkunden) nach Versand der SMS zurück.
replyto (optional) replyto=an@1andere.de Antworten (Tarif 7) und Sendeberichte (Tarif 1 u. 7) werden nicht an die E-Mail des Benutzers, sondern an die angegebene REPLYTO E-Mail-Adresse gesendet.
test (optional) test=1 test=1 aktiviert den Testmodus. SMS werden nicht versendet und nicht berechnet.

Bitte Benutzername, Passwort und Kundennummer mit Ihren Daten ersetzen.
Falls Sie noch keine Zugangsdaten haben, bekommen Sie diese hier.

Beispiel-Aufruf Text-SMS (GET)

Der HTTP-Aufruf muss URL-encoded sein, also kein Ä sondern %C4 etc.
Eine vollständige Übersicht gibt es hier: urlencode-chart.
Normalerweise werden die Texte unter PHP und Perl mit entsprechenden Funktionsaufrufen automatisch codiert (urlencode).
Die URL rufen Sie in PHP mit fopen() auf, in Perl mit HTTP::Request (siehe Beispiele).

Zeilenumbrüche in der SMS werden im URL-String durch %0A erzeugt.
Die Parameter können per GET oder POST übertragen werden.

 

 

Statuscodes

Der Aufruf der URL liefert im Erfolgsfall zurück:

<smsout>
  <status>0</status>
  <statustext>SMS erfolgreich versendet</statustext>
</smsout>
oder im erweiterten Format mit v=1:
<smsout>
  <status>0</status>
  <statustext>SMS erfolgreich versendet</statustext>
  <smsid>123456789</smsid>
</smsout>
oder mit Anzeige des Restguthabens guthaben=1:
<smsout>
  <status>0</status>
  <statustext>SMS erfolgreich versendet</statustext>
  <guthaben>23.35</guthaben>
</smsout>
Definierte Statuscodes derzeit:
 0 = SMS erfolgreich versendet
10 = Falsche Authentifizierung, Ungueltige Kombination User/Passwort/Kundennummer
11 = Falsche Authentifizierung, User fehlt
12 = Falsche Authentifizierung, Passwort fehlt
13 = Falsche Authentifizierung, Kundennr fehlt
20 = Handynummer fehlt
21 = Ungueltige Handynr
22 = Handynummer zu kurz
23 = Handynummer zu lang
25 = SMS Text fehlt
30 = Ungueltiger Tarif
31 = Ungueltige Kombination Tarif/Handynummer
40 = Test SMS aufgebraucht
41 = Guthaben aufgebraucht
42 = Monatslimit erreicht
51 = Ungueltige Absenderkennung
52 = Absenderkennung zu kurz
99 = Stoerung beim SMSC
Lesen Sie auch in unseren FAQ: Wie kann ich den Statuscode der HTTP-Schnittstelle verarbeiten?

 

4.) Sendeberichte empfangen

Pull: Siehe unter Handbuch Sendeberichte über HTTP Pullen

Push: Siehe unter Handbuch Sendeberichte über HTTP Pushen

 

5.) Antworten empfangen

Siehe unter Handbuch Antworten über HTTP Push

 

6.) Guthabenabfrage

Siehe unter Handbuch Guthabenabfrage über http oder https-Request

 

7.) Programmier-Beispiele

Beispielcode für PHP:

<?php
/* ================================================
Beispielcode für den Versand von SMS über URL-Aufruf
von www.sms4.de
===================================================*/

$kdnr  = "XY12345";	// Bitte mit Ihrer Kundennr ersetzen
$pw   = "8899";		// Bitte mit Ihrem Passwort ersetzen
$user = "Andre";	// Bitte mit Ihrem Usernamen ersetzen


// Ihre Absenderkennung ( 6 bis 11 Zeichen Text oder 6 bis 14 Ziffern )
$absender="017488997766"; 

// Handynummer inklusive Landesvorwahl und Netz
$handynr = "491741234567";

$text = "Das ist ein Test mit PHP"; // Text der SMS 

$tarif = 1; // mit Absenderkennung und Sendeberichten, direkte Terminierung im SMSC

// URL zusammenbauen

$url = "http://www.sms4.de/cgi-bin/sms_out.pl?" 
 . "handynr="  . UrlEncode($handynr) 
 . "&user=" . UrlEncode($user) 
 . "&pwd=" . UrlEncode($pw) 
 . "&kdnr="  . UrlEncode($kdnr) 
 . "&text="  . UrlEncode($text)
 . "&tarif="    . UrlEncode($tarif)
 . "&absender="    . UrlEncode($absender)
 ;

// echo $url;

/* Aufrufen der URL */ 

$message="";

if ( ($f = @fopen($url, "r")))  {
 $max_zeichen=256;
 $daten = fgets($f, $max_zeichen);
	while ($daten) {
	 $message.= $daten;
	 $daten = fgets($f, $max_zeichen);	    
	}
}
else { 
 echo "Fehler: URL $url konnte nicht geoeffnet werden.";
/* 
Wenn Sie Dateien nicht mit fopen() öffnen können, sollten Sie
Ihre Server-Konfiguration überprüfen. Die Option allow_url_fopen in
der php.ini muss auf TRUE gesetzt sein. 
Wichtige Hinweise zu fopen siehe
http://www.php.net/manual/de/wrappers.http.php
*/
} 

echo $message;

?>

 

Beispielcode für Perl:

#!/usr/bin/perl

#############################################################
# Beispielcode für den Versand von SMS über einen POST-Request
# von www.sms4.de
#############################################################

# Standard-CGI-Routinen laden
use CGI;

$kdnr= 'XY12345';# Bitte mit Ihrer Kundennr ersetzen
$pw= '8899';# Bitte mit Ihrem Passwort ersetzen
$user = 'Andre';# Bitte mit Ihrem Usernamen ersetzen

# Ihre Absenderkennung ( 6 bis 11 Zeichen Text oder 6 bis 14 Ziffern )
$absender = 'Der Peter';

# Handynummer inklusive Landesvorwahl und Netz
$handynr = "491741234567";

$tarif = 1; # mit Absenderkennung und Sendeberichten, direkte Terminierung im SMSC

$text = 'Das ist ein Test mit Perl';	# Text der SMS

# Aufrufen der URL via POST

use HTTP::Request::Common;
use LWP::UserAgent;
$ua = new LWP::UserAgent;
$res = $ua->request(
POST 'http://www.sms4.de/cgi-bin/sms_out.pl',
[
handynr => $handynr,
user => $user,
pwd => $pw,
kdnr => $kdnr,
text => $text,
tarif => $tarif,
absender => $absender
]

);

if ($res->is_error) {
# HTTP error
}

my $output = new CGI;
print $output->header();

# Meldung ausgeben

if ($res->is_success) {
   print $res->content;
}
else {
   die $res->status_line;
}

 

Beispielcode für ASP:

<%@LANGUAGE="VBScript"%>
<%
' Beispielcode für den Versand von SMS über einen POST-Request
' von www.sms4.de

Dim xmlobj, url

Dim kdnr 
Dim pw 
Dim user
Dim absender
Dim handynr
Dim tarif
Dim text  

kdnr = "XY12345" 'Bitte mit Ihrer Kundennr ersetzen
pw = "8899" 'Bitte mit Ihrem Passwort ersetzen
user = "Andre" 'Bitte mit Ihrem Usernamen ersetzen

'Ihre Absenderkennung ( 6 bis 11 Zeichen Text oder 6 bis 14 Ziffern )
absender = "Der Peter"

'Handynummer inklusive Landesvorwahl und Netz
handynr="491741234567"

tarif = 1 'mit Absenderkennung und Sendeberichten, direkte Terminierung im SMSC

text = "Das ist ein Test mit ASP" 'Text der SMS 

' URL zusammenbauen
url = "handynr=" &  Server.URLEncode(handynr)
url = url & "&user=" &  Server.URLEncode(user)
url = url & "&pwd=" &  Server.URLEncode(pw)
url = url & "&kdnr=" &  Server.URLEncode(kdnr)
url = url & "&text=" &  Server.URLEncode(text)
url = url & "&tarif=" &  Server.URLEncode(tarif)
url = url & "&absender=" &  Server.URLEncode(absender)

'Aufrufen der URL via POST
set xmlobj = Server.CreateObject("Msxml2.ServerXMLHTTP")
' set xmlobj = Server.CreateObject("Msxml2.ServerXMLHTTP.4.0")
' set xmlobj = Server.CreateObject("Microsoft.XMLHTTP")
xmlobj.open "POST", "http://www.sms4.de/cgi-bin/sms_out.pl", false
xmlobj.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
xmlobj.Send url

'Meldung ausgeben
if (xmlobj.status <> 200 ) then
' HTTP error
else
	Response.write(xmlobj.responseText)
end if

set xmlobj = nothing
%>

 

Beispielcode für JSP:

<%@ page import="java.util.*" %>
<%@ page import="java.net.*" %>
<%@ page import="java.io.*" %>

<%

/* ========================================================
Beispielcode für den Versand von SMS über einen POST-Request
von www.sms4.de
===========================================================*/

String kdnr = "XY12345";		// Bitte mit Ihrer Kundennr ersetzen
String pw = "8899";		// Bitte mit Ihrem Passwort ersetzen
String user = "Andre";		// Bitte mit Ihrem Usernamen ersetzen

// Ihre Absenderkennung ( 6 bis 11 Zeichen Text oder 6 bis 14 Ziffern )
String absender = "Der Peter";

// Handynummer inklusive Landesvorwahl und Netz
String handynr = "491741234567";

String tarif = "1"; // mit Absenderkennung und Sendeberichten, direkte Terminierung im SMSC
String text = "Das ist ein Test mit JSP"; // Text der SMS

// URL zusammenbauen

String uri = "handynr=" + URLEncoder.encode(handynr);
uri = uri + "&user=" + URLEncoder.encode(user);
uri = uri + "&pwd=" + URLEncoder.encode(pw);
uri = uri + "&kdnr=" + URLEncoder.encode(kdnr);
uri = uri + "&text=" + URLEncoder.encode(text);
uri = uri + "&tarif=" + URLEncoder.encode(tarif);
uri = uri + "&absender=" + URLEncoder.encode(absender);


// Aufrufen der URL via POST
try {
	URL http = new URL("http://www.sms4.de/cgi-bin/sms_out.pl");

	try {
		URLConnection connect = http.openConnection();
		connect.setDoOutput(true);
		connect.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
		PrintWriter output = new PrintWriter(connect.getOutputStream());
		output.println(uri);
		output.close();
		
		BufferedReader input = new BufferedReader(new InputStreamReader(connect.getInputStream()));
		String res = input.readLine();
		input.close();
		
		//Meldung ausgeben
		out.println(res);
	}
	catch (IOException ex) {
		//HTTP error
		out.println(ex);
	}
}
catch(MalformedURLException e) {
	out.println(e);
}

%>

 

Beispiel für JAVA 6

Download Quellcode
Parameter:
 -a,--a                 Absenderkennung
 -d,--debug             Debugmodus
 -h,--help              Diese Hilfe anzeigen.
 -hnr,--handynummer     Handynummer (Pflicht)
 -kdnr,--kundennummer   Kundennummer (Pflicht)
 -pw,--passwort         Passwort (Pflicht)
 -t,--tarif             Tarif 1 oder 7
 -txt,--text            Text der SMS (Pflicht).
 -u,--user              User (Pflicht)
 
Beispielaufruf:
java SMS4 -hnr=491743333333 -u=XYZ -pw=XYZ -kdnr=XY12345 -txt="Dies ist ein Text" -t=1
 

 

Beispiel für Visual C# 2008

Download Quellcode
Parameter:
 -a,--a         Absenderkennung
 -d,--d         Debugmodus
 -h,--h         Diese Hilfe anzeigen.
 -hnr,--hnr     Handynummer (Pflicht)
 -kdnr,--kdnr   Kundennummer (Pflicht)
 -pw,--pw       Passwort (Pflicht)
 -t,--t         Tarif 1 oder 7
 -txt,--txt     Text der SMS (Pflicht).
 -u,--u         User (Pflicht)
 
Beispielaufruf:
SMS4 -hnr=491743333333 -u=XYZ -pw=XYZ -kdnr=XY12345 -txt="Dies ist ein Text" -t=1
 

 

Beispiel für Visual C++ 6.0

Download Quellcode
Parameter: User Passwort Kundennr Handynr "Text" [Absender] [Tarif]
 
Beispielaufruf:
SMS4 XYZ XYZ XY12345 491743333333 "Dies ist ein Text" Peter 1
 

 

Beispiel für Visual Basic

Download Quellcode
Private Sub CommandButton1_Click()

Dim res

' Aufruf der SMS Sendefunktion: User, Passwort, Kundennr, Handynr, Text, Absender, Tarif
res = SMS4("XYZ", "XYZ", "XY12345", "491743333333", "Dies ist ein Text", "Der Peter", 1)
MsgBox res

End Sub 

 

Beispiele für Aufruf aus Kommandozeile

Aufruf Internet Explorer übernimmt die Proxy-Einstellungen, daher auch Versand aus Firmennetzen möglich:
"C:\Program Files\Internet Explorer\iexplore.exe"  -extoff -private "https://www.sms4.de/cgi-bin/sms_out.pl?handynr=49174123456&user=abc&pwd=123=kdnr=abca&text=Dies+ist+ein+Text&tarif=1&absender=ichbins"
Fenster schliessen mit
taskkill /f /im iexplore.exe
mit Wget:
wget -q -O - "http://www.sms4.de/cgi-bin/sms_out.pl?handynr=491743333333&user=XYZ&pwd=XYZ&kdnr=XY12345&text=Dies+ist+ein+Text&tarif=1"

	oder per POST-Request:

wget -q -O - --post-data "handynr=491743333333&user=XYZ&pwd=XYZ&kdnr=XY12345&text=Dies+ist+ein+Text&tarif=1" http://www.sms4.de/cgi-bin/sms_out.pl
mit Lynx:
lynx -source "http://www.sms4.de/cgi-bin/sms_out.pl?handynr=491743333333&user=XYZ&pwd=XYZ&kdnr=XY12345&text=Dies+ist+ein+Text&tarif=1"
mit cURL:
curl "http://www.sms4.de/cgi-bin/sms_out.pl?handynr=491743333333&user=XYZ&pwd=XYZ&kdnr=XY12345&text=Dies+ist+ein+Text&tarif=1"

	oder per POST-Request und via SSL:

curl -k --data-urlencode "handynr=491743333333" --data-urlencode "user=XYZ" --data-urlencode "pwd=XYZ" --data-urlencode "kdnr=XY12345" --data-urlencode "text=Dies ist ein Text via SSL" https://www.sms4.de/cgi-bin/sms_out.pl
mit .Net:

namespace HttpClientSample
{
    class Program
    {
        static void Main(string[] args)
        {

            // GetRequest("someurl");
            PostRequest("https://www.sms4.de/cgi-bin/sms_xml.pl");
            Console.ReadKey();
        }


        async static void PostRequest(string url)
        {
            string strxml = @"<httptosms>
                            <user>xxx</user>
                            <pwd>yyy</pwd>
                            <custid>zzz</custid>
                            <job>
                            <msg>Test XML SMS4 .net.</msg>
                            <tariff>1</tariff>
                            <sender>MeinName</sender>
                            <sms>
                            <to>0174200000</to>
                            </sms>
                            </job>
                            </httptosms>
                            "
                                ;
            Console.WriteLine(strxml);
            Console.WriteLine();

            IEnumerable<KeyValuePair<string, string>> queries = new List<KeyValuePair<string, string>>()
            {
                new KeyValuePair<string, string>("xml", strxml)
            };

            HttpContent q = new FormUrlEncodedContent(queries);
            using (HttpClient client = new HttpClient())
            {
                using (HttpResponseMessage response = await client.PostAsync(url,q))
                {
                    using (HttpContent content = response.Content)
                    {
                        String mycontent = await content.ReadAsStringAsync();
                        Console.WriteLine(mycontent);
                    }
                }
            }
        }

        async static void GetRequest(string url)
        {
            using (HttpClient client = new HttpClient())
            {
                using (HttpResponseMessage response = await client.GetAsync(url))
                {
                    using(HttpContent content = response.Content)
                    {
                        string mycontent = await content.ReadAsStringAsync();
                        Console.WriteLine(mycontent);
                    }
                }
            }
        }
    }
}