我正在开发一个项目,我必须获取数据包的状态(通过DHL发送)。我读到了DHL API,它返回了一个XML,但不知怎的,那里没有好的例子。我找到了一些代码片段,但我不知道在哪里注册API Key。
有人为我提供一些链接或示例吗?
祝你好运, 卢卡斯
答案 0 :(得分:5)
此PHP客户端也可用于使用DHL XML API。它可以处理DHL公开的所有不同服务。
https://github.com/alfallouji/DHL-API
此客户端不依赖或依赖任何框架,并且应该很容易与您自己的代码集成。您可以查看samples文件夹,例如如何使用它。
答案 1 :(得分:1)
https://github.com/jklz/DHL-API-Tracking-PHP
它用于使用XML-PI连接到DHL,以使用Air Way Bill跟踪货件。它可以处理单个跟踪号码,也可以处理多个跟踪号码(已经过250次测试,然后花一点时间运行没有问题)。自动接收并将跟踪数字阵列分成块,然后将请求发送到DHL,确保不传递每个请求可以跟踪的最大数量,然后将结果作为数组返回。
答案 2 :(得分:0)
有一个很好的博客。不幸的是,它在德语中,但那里显示的代码应该对你有意义。
来源:https://blog.simlau.net/dhl-tracking-api-php.html
摘录:
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));
此函数将返回一个包含一些跟踪信息的数组:
Array
(
[status] => Die Sendung wurde erfolgreich zugestellt.
[recipient-id-text] => Nachbar
[product-name] => DHL PAKET
[pan-recipient-name] => SIMON LAUGER
)
(事实上,那里有更多的数据。)
我希望这会以某种方式帮助你。
答案 3 :(得分:0)
快速而肮脏,没有任何第三方库并且使用官方API:
<?php
$mode = 'sandbox'; // sandbox or production
$username = ''; // dhl developer account name, not email
$password = ''; // dhl developer account pass
$appname = 'zt12345'; // sandbox app
$apppass = 'geheim'; // sandbox app
$endpoint = 'https://cig.dhl.de/services/' . $mode . '/rest/sendungsverfolgung';
$payload = simplexml_load_string( '<?xml version="1.0" encoding="UTF-8" standalone="no"?><data appname="' . $appname . '" language-code="de" password="' . $apppass . '" piece-code="" request="d-get-piece-detail"/>' );
$shipmentids = array(
'00340434161094015902' // in sandbox only special numbers are allowed
);
$opts = array(
'http' => array(
'method' => "GET",
'header' => "Authorization: Basic " . base64_encode( "$username:$password" )
)
);
$context = stream_context_create( $opts );
foreach ( $shipmentids as $shipmentid ) {
$payload->attributes()->{'piece-code'} = $shipmentid;
$response = file_get_contents( $endpoint . '?' . http_build_query( array( 'xml' => $payload->saveXML() ) ), false, $context );
$responseXml = simplexml_load_string( $response );
$status = null;
// get last state
foreach ( $responseXml->data->data->data as $event ) {
$status = $event->attributes()->{'event-short-status'};
}
echo "Shipment " . $shipmentid . " is in state: " . $status . "\n";
}