This commit is contained in:
2026-04-14 20:36:20 +02:00
parent e15b4ccf45
commit 0e8f246d6f
16 changed files with 1234 additions and 54 deletions

View File

@@ -485,6 +485,15 @@ final class ApaczkaShipmentService implements ShipmentProviderInterface
}
}
// Apaczka API: receiver.street limit 30 znakow. Dla uslug punktowych street to etykieta
// punktu — obcinamy bezpiecznie. Dla uslug kurierskich rzucamy wyjatek, zeby operator
// skrocil adres recznie (auto-truncate mogloby uciac numer domu/mieszkania).
if ($receiverPointId !== '') {
$street = $this->truncateStreetForPoint($street);
} else {
$this->assertStreetWithinCourierLimit($street);
}
if ($name === '' || $street === '' || $city === '' || $postalCode === '' || $countryCode === '') {
throw new ShipmentException('Brak wymaganych danych adresowych odbiorcy.');
}
@@ -519,6 +528,39 @@ final class ApaczkaShipmentService implements ShipmentProviderInterface
return $receiver;
}
/**
* Apaczka API: receiver.street limit 30 znakow.
* Dla uslug punktowych (ORLEN/Paczkomat) street to etykieta punktu — obcinamy bezpiecznie.
*/
private function truncateStreetForPoint(string $street): string
{
$street = trim($street);
if (mb_strlen($street, 'UTF-8') <= 30) {
return $street;
}
return rtrim(mb_substr($street, 0, 30, 'UTF-8'));
}
/**
* Apaczka API: receiver.street limit 30 znakow.
* Dla uslug kurierskich NIE obcinamy — ryzyko utraty numeru domu/mieszkania.
*/
private function assertStreetWithinCourierLimit(string $street): void
{
$length = mb_strlen($street, 'UTF-8');
if ($length <= 30) {
return;
}
throw new ShipmentException(sprintf(
'Ulica odbiorcy przekracza 30 znakow (limit API Apaczka dla uslug kurierskich). '
. 'Skroc adres recznie przed utworzeniem przesylki. Obecna wartosc: %d znakow: "%s"',
$length,
$street
));
}
/**
* @param array<string, mixed> $address
*/