$code, "carrier" => empty($carrier) ? Carriers::getCarrierCode($barcode->getCarrier()) : $carrier ]); } catch (Exception $ex) { throw new TrackingException("There was a server problem. This code cannot be tracked right now."); } if (empty($status->tracking_status) && empty($status->address_to) && empty($status->address_from)) { throw new TrackingException("Unknown tracking code (best guess: " . Carriers::getCarrierName($barcode->getCarrier()) . ")."); } $info = new TrackingInfo(); $info->setCode($barcode->getCode()); $info->setCarrier($barcode->getCarrier()); $info->setService(new Service($status->servicelevel->token, $status->servicelevel->name)); $info->setCarrierAttributionText(CarrierAssets::getAttribution(Carriers::getCarrierCode($info->getCarrier()))); $info->setCarrierLogo(CarrierAssets::getLogo(Carriers::getCarrierCode($info->getCarrier()))); if (!empty($status->tracking_status)) { $current_status = new TrackingEntry( TrackingStatus::stringToStatus($status->tracking_status->status), $status->tracking_status->status_details, $status->tracking_status->status_date ); if (!empty($status->tracking_status->location)) { $current_location = new Location(); $current_location->city = $status->tracking_status->location->city; $current_location->state = $status->tracking_status->location->state; $current_location->zip = $status->tracking_status->location->zip; $current_location->country = $status->tracking_status->location->country; $current_status->setLocation($current_location); } $info->setCurrentStatus($current_status); } if (!empty($status->address_from)) { $from = new Location(); $from->city = empty($status->address_from->city) ? "" : $status->address_from->city; $from->state = empty($status->address_from->state) ? "" : $status->address_from->state; $from->zip = empty($status->address_from->zip) ? "" : $status->address_from->zip; $from->country = empty($status->address_from->country) ? "" : $status->address_from->country; $info->setFrom($from); } if (!empty($status->address_to)) { $to = new Location(); $to->city = empty($status->address_to->city) ? "" : $status->address_to->city; $to->state = empty($status->address_to->state) ? "" : $status->address_to->state; $to->zip = empty($status->address_to->zip) ? "" : $status->address_to->zip; $to->country = empty($status->address_to->country) ? "" : $status->address_to->country; $info->setTo($to); } foreach ($status->tracking_history as $history) { $location = new Location(); $location->city = $history->location["city"]; $location->state = $history->location["state"]; $location->zip = $history->location["zip"]; $location->country = $history->location["country"]; $info->appendHistoryEntry(new TrackingEntry(TrackingStatus::stringToStatus($history->status), $history->status_details, $history->status_date, $location)); } return $info; } }