Inject \Magento\Sales\Model\ResourceModel\Order\Shipment\Track\CollectionFactory
into your class constructor and filter by track_number
:
use Magento\Sales\Api\Data\ShipmentTrackInterface;
use Magento\Sales\Model\Order\Shipment;
use Magento\Sales\Model\ResourceModel\Order\Shipment\Track\CollectionFactory as TrackCollectionFactory;
class Example
{
/** @var \Magento\Sales\Model\ResourceModel\Order\Shipment\Track\Collection */
protected $trackingCollection;
public function __construct(TrackCollectionFactory $collectionFactory)
{
$this->trackingCollection = $collectionFactory->create();
}
public function getShipmentDetailsFromTrackingNumber($number)
{
try {
$this->trackingCollection
->addFieldToFilter(ShipmentTrackInterface::TRACK_NUMBER, $number);
/** @var Shipment\Track $tracking */
$tracking = $this->trackingCollection->getFirstItem();
/** @var Shipment $shipment */
$shipment = $tracking->getShipment();
return $shipment->getData();
}
catch (\Magento\Framework\Exception\LocalizedException $e) {}
return null;
}
}