diff --git a/lib/TrackingStatus.lib.php b/lib/TrackingStatus.lib.php index 8c6be53..da13c4c 100644 --- a/lib/TrackingStatus.lib.php +++ b/lib/TrackingStatus.lib.php @@ -238,6 +238,7 @@ class TrackingStatus { switch ($eventcode) { case "M": case "MV": + case "ZA": // UPS My Choice redirect return TrackingStatus::TRACKING_STATUS_PRE_TRANSIT; case "I": case "P": diff --git a/lib/Tracking_UPS.lib.php b/lib/Tracking_UPS.lib.php index b7180df..5e52f9d 100644 --- a/lib/Tracking_UPS.lib.php +++ b/lib/Tracking_UPS.lib.php @@ -48,6 +48,10 @@ class Tracking_UPS { curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($trackrequest)); $response = curl_exec($ch); + //header("Content-Type: application/json"); + //echo json_encode(json_decode($response), JSON_PRETTY_PRINT); + //exit(); + // CHECK TO SEE IF WE GOT AN ERROR // IF SO, FORMAT IT LIKE THIS ::28::Operation timed out afterseconds if ((curl_errno($ch)) && (curl_errno($ch) != 0)) { @@ -84,8 +88,21 @@ class Tracking_UPS { } $info = new TrackingInfo(); - - $info->setCode($trackinfo["Package"]["TrackingNumber"]); + if (!empty($trackinfo["Package"]["TrackingNumber"])) { + $info->setCode($trackinfo["Package"]["TrackingNumber"]); + } else if (is_array($trackinfo["Package"])) { + // More than one linked package in one shipment, get rid of the extra and make the + // schema match what we expect + $package = []; + for ($i = 0; $i < count($trackinfo["Package"]); $i++) { + if ($trackinfo["Package"][$i]["TrackingNumber"] == $code) { + $info->setCode($trackinfo["Package"][$i]["TrackingNumber"]); + $package = $trackinfo["Package"][$i]; + $trackinfo["Package"] = $package; + break; + } + } + } $info->setCarrier("ups"); $info->setService(new Service($trackinfo["Service"]["Code"], $trackinfo["Service"]["Description"]));