From 5059d2e8f442d1b2180cfaf3d469a492feab4e19 Mon Sep 17 00:00:00 2001 From: Vitalij Mik Date: Wed, 11 Sep 2024 11:49:14 +0200 Subject: [PATCH] NTR: do not send tracking data without code --- src/Service/MollieApi/Shipment.php | 14 ++++++++++++-- src/Service/TrackingInfoStructFactory.php | 20 ++++++++++++-------- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/src/Service/MollieApi/Shipment.php b/src/Service/MollieApi/Shipment.php index c838d53a6..c64ab0fbe 100644 --- a/src/Service/MollieApi/Shipment.php +++ b/src/Service/MollieApi/Shipment.php @@ -52,7 +52,12 @@ public function shipOrder(string $mollieOrderId, string $salesChannelId, array $ $options = []; if ($tracking instanceof ShipmentTrackingInfoStruct) { - $options['tracking'] = $tracking->toArray(); + $trackingData = $tracking->toArray(); + + /** Make sure that tracking data is only set when the code has a value */ + if ($trackingData['code'] !== '') { + $options['tracking'] = $trackingData; + } } $mollieOrder = $this->orderApiService->getMollieOrder($mollieOrderId, $salesChannelId); @@ -105,7 +110,12 @@ public function shipItem(string $mollieOrderId, string $salesChannelId, string $ ]; if ($tracking instanceof ShipmentTrackingInfoStruct) { - $options['tracking'] = $tracking->toArray(); + $trackingData = $tracking->toArray(); + + /** Make sure that tracking data is only set when the code has a value */ + if ($trackingData['code'] !== '') { + $options['tracking'] = $trackingData; + } } $mollieOrder = $this->orderApiService->getMollieOrder($mollieOrderId, $salesChannelId); diff --git a/src/Service/TrackingInfoStructFactory.php b/src/Service/TrackingInfoStructFactory.php index 507f29938..33dede484 100644 --- a/src/Service/TrackingInfoStructFactory.php +++ b/src/Service/TrackingInfoStructFactory.php @@ -101,7 +101,7 @@ public function create(string $trackingCarrier, string $trackingCode, string $tr private function createInfoStruct(string $trackingCarrier, string $trackingCode, string $trackingUrl): ?ShipmentTrackingInfoStruct { if (empty($trackingCarrier) && empty($trackingCode)) { - $this->logger->info('No tracking information provided for shipment.'); + $this->logger->debug('No tracking information provided for shipment.'); return null; } @@ -113,7 +113,7 @@ private function createInfoStruct(string $trackingCarrier, string $trackingCode, throw new \InvalidArgumentException('Missing Argument for Tracking Code!'); } - $this->logger->info('Creating tracking information for shipment.', [ + $this->logger->debug('Creating tracking information for shipment.', [ 'trackingCarrier' => $trackingCarrier, 'trackingCode' => $trackingCode, 'trackingUrl' => $trackingUrl @@ -121,14 +121,14 @@ private function createInfoStruct(string $trackingCarrier, string $trackingCode, // determine if the provided tracking code is actually a tracking URL if (empty($trackingUrl) === true || $this->urlParsingService->isUrl($trackingCode)) { - $this->logger->info('Tracking code is a URL, parsing tracking code from URL.', [ + $this->logger->debug('Tracking code is a URL, parsing tracking code from URL.', [ 'trackingCode' => $trackingCode, 'trackingUrl' => $trackingUrl ]); [$trackingCode, $trackingUrl] = $this->urlParsingService->parseTrackingCodeFromUrl($trackingCode); - $this->logger->info('Parsed tracking code from URL.', [ + $this->logger->debug('Parsed tracking code from URL.', [ 'trackingCode' => $trackingCode, 'trackingUrl' => $trackingUrl ]); @@ -137,22 +137,26 @@ private function createInfoStruct(string $trackingCarrier, string $trackingCode, # we just have to completely remove those codes, so that no tracking happens, but a shipping works. # still, if we find multiple codes (because separators exist), then we use the first one only if (mb_strlen($trackingCode) > self::MAX_TRACKING_CODE_LENGTH) { - $this->logger->info('Tracking code is too long, truncating.', ['trackingCode' => $trackingCode]); + $this->logger->debug('Tracking code is too long, truncating.', ['trackingCode' => $trackingCode]); if (strpos($trackingCode, ',') !== false) { $trackingCode = trim(explode(',', $trackingCode)[0]); } elseif (strpos($trackingCode, ';') !== false) { $trackingCode = trim(explode(';', $trackingCode)[0]); } - $this->logger->info('Truncated tracking code.', ['trackingCode' => $trackingCode]); + $this->logger->debug('Truncated tracking code.', ['trackingCode' => $trackingCode]); # if we are still too long, then simply remove the code if (mb_strlen($trackingCode) > self::MAX_TRACKING_CODE_LENGTH) { - $this->logger->info('Tracking code is still too long, removing.', ['trackingCode' => $trackingCode]); - return new ShipmentTrackingInfoStruct($trackingCarrier, '', ''); + $this->logger->warning('Tracking code is still too long, removing.', ['trackingCode' => $trackingCode]); + return null; } } + if (mb_strlen($trackingCode) === 0) { + $this->logger->warning('Tracking Code is empty'); + return null; + } # had the use case of this pattern, and it broke the sprintf below if ($this->stringContains($trackingUrl, '%s%')) {