You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
2.4 KiB
PHP
83 lines
2.4 KiB
PHP
<?php
|
|
|
|
$trackinginfo;
|
|
|
|
$revision = 1;
|
|
if (!empty($VARS["revision"]) && preg_match("/[0-9]/", $VARS["revision"])) {
|
|
$revision = $VARS["revision"];
|
|
}
|
|
|
|
$code = urldecode($VARS["code"]);
|
|
$carrier = "";
|
|
if (!empty($VARS["carrier"])) {
|
|
$carrier = $VARS["carrier"];
|
|
}
|
|
|
|
// Check if code starts with carrier name and colon
|
|
if ($carrier == "") {
|
|
$codeparts = explode(":", $code);
|
|
if (count($codeparts) == 2) {
|
|
switch (strtoupper(trim($codeparts[0]))) {
|
|
case "FEDEX":
|
|
$carrier = "fedex";
|
|
break;
|
|
case "UPS":
|
|
$carrier = "ups";
|
|
break;
|
|
case "USPS":
|
|
$carrier = "usps";
|
|
break;
|
|
}
|
|
if ($carrier != "") {
|
|
$code = trim($codeparts[1]);
|
|
}
|
|
}
|
|
}
|
|
|
|
function downgradeResponseVersion($data, int $version) {
|
|
switch ($version) {
|
|
case 2:
|
|
return $data;
|
|
case 1:
|
|
// No "INFO" status type in first version
|
|
if (!empty($data["current"]["status"]) && $data["current"]["status"] == "INFO") {
|
|
$data["current"]["status"] = "TRANSIT";
|
|
}
|
|
if (!empty($data["history"])) {
|
|
for ($i = 0; $i < count($data["history"]); $i++) {
|
|
if ($data["history"][$i]["status"] == "INFO") {
|
|
$data["history"][$i]["status"] = "TRANSIT";
|
|
}
|
|
}
|
|
}
|
|
return $data;
|
|
}
|
|
}
|
|
|
|
try {
|
|
$cacheresp = $memcache->get("logistics.tracking.$code.$carrier");
|
|
if ($cacheresp !== false && empty($VARS["nocache"])) {
|
|
exitWithJson(downgradeResponseVersion(json_decode($cacheresp, true), $revision));
|
|
}
|
|
|
|
$trackinginfo = Tracking::track($code, $carrier);
|
|
} catch (TrackingException $ex) {
|
|
if (env("debugmode", false)) {
|
|
echo $ex->getTraceAsString();
|
|
}
|
|
$output = [
|
|
"status" => "ERROR",
|
|
"msg" => $ex->getMessage()
|
|
];
|
|
$memcache->set("logistics.tracking.$code.$carrier", json_encode($output), 60 * 10);
|
|
exitWithJson(downgradeResponseVersion($output, $revision));
|
|
}
|
|
|
|
if (is_null($trackinginfo)) {
|
|
sendJsonResp("Could not find any results for that tracking code.", "ERROR");
|
|
}
|
|
|
|
$output = $trackinginfo->toObject();
|
|
$memcache->set("logistics.tracking.$code.$carrier", json_encode($output), 60 * 60);
|
|
exitWithJson($output);
|