DHL-Tracking API mit PHP abrufen

Lange habe ich schon danach gesucht und endlich bin ich doch mal fündig geworden – die Tracking-API von DHL. Tatsächlich gibt es im Netz nahezu keine offizielle Dokumentation dieser mysteriösen API. Die public API dient zum Abrufen des Status eines Pakets, mit der privaten API können Firmen sich z. B. Paketaufkleber etc. ausdrucken lassen.

Die Public API reicht allerdings für die meisten Zwecke vollkommen, mit ihr kann man z. B. per Script die Sendung eines Pakets überwachen. Hier meine kleine, beispielhafte-Funktion:

function dhl_tracking($trackingnumber)
{
	$data  = '<?xml version="1.0" encoding="ISO-8859-1" ?>';
	$data .= '<data appname="nol-public" password="anfang" request="get-status-for-public-user" language-code="de">';
	$data .= '  <data piece-code="'.$trackingnumber.'"></data>';
	$data .= '</data>';

	// URL bauen und File hohlen
	$xml = simplexml_load_file(sprintf(
		'http://nolp.dhl.de/nextt-online-public/direct/nexttjlibpublicservlet?xml=%s', $data
	));

	// FALSE, wenn Syntax oder HTTP Error
	if ($xml === false) return false;

	// Wandelt das SimpleXML Objekt in ein Array um
	foreach ($xml->data->data->attributes() as $key => $value) {
		$return[$key] = (string) $value;
	}
	return $return;
}

// Aufruf der Funktion
print_r(dhl_tracking($tracking_number));

Sollte die Funktion false zurück liefern gab es einen Problem mit dem Tomcat Server und der Anfrage (etwa falscher Syntax, fehlerhaftes XML). Wenn piece-status einen anderen Wert als 0 enthält liegt ein Problem mit dem Datensatz selbst vor (z. B. keine Daten vorhanden).


Als Ergebnis erhält man dann ein Array, etwa mit folgenden Werten (hier etwas gekürzt, tatsächlich sind es einiges mehr an Infos):

Array
(
    [status] => Die Sendung wurde erfolgreich zugestellt.
    [recipient-id-text] => Nachbar
    [product-name] => DHL PAKET
    [pan-recipient-name] => SIMON LAUGER
)

Insbesondere für Shop-Betreiber, die ihren Kunden die Möglichkeit geben wollen in ihrem Shop den Status der Lieferung anzusehen sollte das recht interessant sein.

Kommentare (22)

Stephan Krauß14.06.2010 um 15:43 Uhr

Hallo !

Endlich einmal eine verwertbare Information zur DHL – API. Ich hatte gerade ein echt spannendes Telefonat mit der Hotline der DHL. Der Hinweis auf eine API fehlte völlig.
Momentan habe ich noch folgendes Problem. Wenn ich mehrere Päckchen oder Pakete vorbereite dann will ich die Paketaufkleber mittels Datenbank erstellen. Wie bekoome ich aber die DHL – ID vor dem Ausdruck ?

Gibt es noch mehr Informationen zur API ?

Gruß

Stephan

Simon15.06.2010 um 17:21 Uhr

Hi Stephan,

leider gibts wie du selbst schon erfahren hast nur sehr, sehr wenige offizielle Infos darüber. Selbst die Mitarbeiter wissen darüber meistens nicht Bescheid.

Hab in einem Blog gelesen, dass es wohl doch eine Dokumentation für die „große API“ für Unternehmen geben soll. Kann dir hier aber leider auch nicht mehr Infos geben, es war bereits schwer genug diese Infos hier oben heraus zu bekommen. 😉

Solltest du allerdings selbst noch was finden wäre ich sehr daran interessiert. 🙂

Gruß, Simon

Duncan13.12.2010 um 14:56 Uhr

Danke…das hat sehr weiter geholfen!

Michael22.06.2011 um 22:55 Uhr

Echt super! Gibt es dort vielleicht noch ein paar andere, interessante Schnittstellen?
Gibt es eigentlich auch eine Möglichkeit, die anderen (leeren) Felder füllen zu lassen, denn auch hier könnte es interessant sein zu sehen, ob es sich um eine „Annahme verweigerung“ handelt …. und noch eine kleine Frage, kann mir vielleicht jemand sagen, ob man irgendwo alle möglichen Statis einsehen kann, so dass man eine schöne Mapping-Tabelle bauen kann …

danke euch für das super Script!

murry06.07.2011 um 17:42 Uhr

Scheinbar hat DHL die API abgeschaltet. Funktioniert auf jeden Fall nicht mehr.

Simon07.07.2011 um 22:11 Uhr

Kann ich jetzt nicht komplett nachvollziehen, da ich momentan keine DHL Tracking Number hier habe, aber du scheinst recht zu haben. Die Zugangsdaten scheinen sich geändert zu haben. Ich bekomme folgendes Resultat. Schade drum.

object(SimpleXMLElement)#1 (1) {
[„@attributes“]=>
array(2) {
[„code“]=>
string(1) „5“
[„error“]=>
string(25) „Anmeldung fehlgeschlagen.“
}
}
PHP Fatal error: Call to a member function attributes() on a non-object in /tmp/dhl_test.php on line 21

Kai11.07.2011 um 12:04 Uhr

Der anonyme Zugang wurde zum 28.06.2011 abgeschaltet.

Das Tracking funktioniert aber über die gleiche Schnittstelle weiterhin, wenn man Benutzername und Passwort mit übergibt.

data appname=“username“ password=“userpass“

Simon11.07.2011 um 12:07 Uhr

Vielen Dank für die Info Kai! Ich korrigiere das gleich. 🙂

telli13.07.2011 um 11:57 Uhr

Halli hallo,

hat jemand eine Ahnung, wo man die Zugangsdaten bekommt? Oder sind das die selben Daten wie von Intrastat?

Die Dame von DHL wusste leider nicht, wovon ich rede 🙂

Vielen Dank im Voraus.

Mark15.07.2011 um 17:01 Uhr

Hallo

Würde mich auch interessieren, wo man die Zugangsdaten herkriegt.

Wir hatten mal versucht, über DHLs Globale XML PI unsere Versendungen zu tracken (http://xmlshippingtest.dhl-usa.com/toolkit/FAQ.htm), aber wie es aussieht, kann man dort nur Express-Sendungen mit einer Airwaybill (AWB) tracken.

Vielen Dank im Voraus!

nate`25.07.2011 um 10:40 Uhr

Die Zugangsdaten sind identisch mit denen für die Business-Paketverfolgung (logisch). Wer sich also hier

https://nolb.dhl.de/nextt-online-business/jsp/loginCheckAction.do

anmelden kann, der kann die selben Daten auch für das o.g. Script verwenden. Funktioniert wunderbar.

Mark26.07.2011 um 09:35 Uhr

Danke!

telli26.07.2011 um 11:14 Uhr

Hey,

besten Dank, werde das für uns gleich mal beantragen.

Chris26.07.2011 um 17:41 Uhr

Kann nicht bestätigen, dass durch ersetzen alles identisch bleibt. Lt. Doku muss dort sowohl der request in:

request =“d-get-piece“
Request URL: https://nolb.dhl.de/nextt-online-
business/direct/nexttjlibpublicservlet mit SSL aktiviert angepasst werden.

Der Einsatz der alten API gibt nur leere zurück:

icewave07.10.2011 um 11:58 Uhr

Heyho 😉 vielleicht hilft euch das? ist zwar aus den USA aber DHL wird wohl keine 21 verschiedenen APIs einsetzen, oder?

http://www.dhl-usa.com/xml/downloads/trackit.zip

toni99624.10.2011 um 01:12 Uhr

Lt. Doku ist gut gesagt, woher bekommt man die Doku denn? Kann sie nirgends finden…
Ein Link oder die gesamte URL für die request URL für den „business“ und nicht den „public“ Zugang wäre auch hilfreich.. Danke!

Michael09.11.2011 um 09:52 Uhr

Hallo.
Ich hatte das gleiche Problem.
Nun habe ich den HTTP Response einfach abgefangen und verarbeite ihn dann weiter.
Hab’s mit Java realisiert.
Funktioniert echt gut und schnell.
Viele Grüße
Michael

Gerald26.11.2011 um 15:04 Uhr

Hallo, Danke für die Antworten bislang!
Ich tappe aber auch im Dunkeln 🙁 Wo bekomme ich a) die Doku her b) den Benutzernamen + Password und c) wie muss ich den oben geposteten Code modifizieren damit das funktioniert 🙁
Viele Grüße

Eyk05.02.2012 um 17:05 Uhr

Hallo,

würde auch sehr gerne DHL Tracking und später die erstellen von Paketscheinen in meine Software integrieren und wäre auch sehr an Infos interessiert.

Die oben genannte Lösung geht ja leider nichtmehr.

grüße

Eyk

Tobi10.02.2012 um 09:38 Uhr

Ich habe das einfach mit einer Regex-Abfrage gelöst, zwar nicht unbedingt die beste Lösung, aber funktioniert zumindest immer.

Falls jemand bedarf hat, kann er mir ja schreiben: froemel@vilotec.de

Moritz02.01.2013 um 00:04 Uhr

Ich hab da mal ne kliene Funktion gebastelt die das Ganze auch ohne account oder ähnliches kann. Bei Interesse: moritz@pixel-color.com

Rene22.03.2015 um 19:51 Uhr

@Moritz..Solange bis man eine Rechnung bekommt, oder die Server IP gesperrt ist, diese illegalen „Curl“ oder „get_file_contents“ – Scraper Geschichten, sollte man als Firmenkunde vermeiden.

Einen Kommentar hinterlassen

Dein Kommentar