answear/acs-bundle
Symfony bundle for ACS pickup point integration. Configure API credentials via YAML, then use ParcelShopsService to fetch parcel shops by country (Greece or Cyprus) and optional kind, returning ParcelShop DTOs. Includes clear exceptions for service and response errors.
ParcelShopsService::getList(CountryIdEnum, ?int $kind) → ParcelShop[]) for GR and CY. That directly supports a "collect from an ACS point" delivery option at checkout — a localized expectation in those markets — or a store/pickup-point locator.kind filter enables product choices — all points vs. lockers only — and the returned shop data drives selector UX, address/hours display, and default-point logic. The GR/CY-only constraint also bounds which markets the feature ships in.ServiceUnavailable and MalformedResponse exceptions (plus the Guzzle timeout added in 2.1.1) define the failure surface. PM-visible decisions follow: retry policy, caching of shop lists, timeout budget, and whether checkout degrades gracefully to home delivery when ACS is down.answear_gls inside an ACS bundle, and installation points at a raw Git URL. Small, but it tells you onboarding requires engineering verification, and it should shape the estimate.Consider it when:
Look elsewhere or deprioritize when:
Http facade plus simple DTOs may be cheaper and cleaner than adapting Symfony-bound code.Executives: "ACS is a major Greek courier, and pickup-point delivery is expected in Greece and Cyprus. This MIT-licensed bundle gives us the ACS parcel-shop lookup for free — one call returning shops filtered by country and kind. It is not a Laravel package, so engineering wraps it; budget a one-to-two week spike, not a build cycle. It covers discovery only — labels and tracking remain separate roadmap decisions. Cash cost is near zero; the real risk is a single-maintainer, zero-adoption dependency, which we contain by isolating it behind our own service interface so it can be swapped without touching product code."
Engineering: "Symfony 6/7 bundle, PHP 8.2–8.4, Guzzle-based, config-driven, with a deliberately small public surface: ParcelShopsService::getList(CountryIdEnum, ?int $kind) returning ParcelShop DTOs, plus typed ServiceUnavailable and MalformedResponse exceptions. Recommendation for our Laravel stack: don't pull the bundle in for its container — reuse its ACS request/response contract and reimplement the client with Laravel's HTTP client. Move config to config/acs.php and env/vault, add timeout, retry, and caching for shop lists, map the two exception types, and fake responses in tests. Wrap it all in app/Services/AcsService so a carrier change is a one-file change. Note the README's config key is mislabeled (answear_gls), so validate against a live sandbox call before committing to the contract."
Proposed next step: approve a time-boxed spike for the GR/CY pickup-point option, gated on a documented fallback to home delivery when ACS is unavailable and a checkout-conversion read before full rollout.
How can I help you explore Laravel packages today?