Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Tourcms Php Laravel Package

tourcms/tourcms-php

A PHP client for the TourCMS API that simplifies connecting your app to tours, bookings, customers, and related resources. It handles API authentication and requests, making it easier to build tour-booking and management features in Laravel or plain PHP.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. tourcms/tourcms-php is a thin, framework-agnostic client for the TourCMS REST API (tours, availability, bookings, channels, customers) — not a Laravel package. It belongs in the outbound-integration layer of the app, behind a gateway/repository interface, so domain code never touches SDK response objects. That isolation is not optional here: v4.10.0's headline change ("handle strings instead of XML objects," TOURCMS-10566) is precisely the kind of serialization detail that leaks into controllers and jobs if the client is called ad hoc. Architecturally this is a "wrap it, don't scatter it" decision.

Integration feasibility. High on effort-to-value. Composer-installable, dependency-light (HTTP client + XML parsing), and the vendor already publishes the API surface we'd otherwise hand-roll. The two additive endpoints — customer create and verify — are the commercially interesting part: they enable self-serve signup → verification → booking without an ops person provisioning records in TourCMS admin. That converts a manual workflow into a product funnel, which is the strongest argument for adoption. Note there is no first-party laravel-tourcms provider, config publish, or facade; we own roughly 100 lines of glue.

Technical risk.

  • Adoption signal is weak, maintainership signal is strong. 9 stars and 0 dependents look alarming on a scorecard, but this is a vendor-official SDK maintained by Palisis (TourCMS's owner) with a 2025-05-08 release. Read it as "small public footprint, single-vendor dependency," not "abandoned." We are effectively a design partner — which is leverage for support escalations and a bus-factor risk at the same time.
  • Medium — type contract drift. The string-vs-XML change alters what parsed responses actually are. Any code doing instanceof SimpleXMLElement, property access, or foreach over an assumed XML node graph may break silently or throw Call to a member function ... on string. Treat a minor bump as potentially breaking; this is the highest-probability incident source in the upgrade.
  • Medium — booking-critical path. This library sits between us and money (availability checks, booking creation). Its failure modes are customer-visible.
  • Low — additive endpoints. No removals or deprecations announced in 4.10.0.
  • Unknown — plan entitlements and PII. New endpoints may 403 if not enabled on our TourCMS account, and customer records carry GDPR/retention obligations.

Key questions.

  1. Does the string-handling change affect all responses or only malformed/error payloads? Is there a documented migration note, or do we infer it from tests?
  2. Are customer create/verify enabled on our marketplace credentials — and what are their rate limits and idempotency semantics (safe to retry on timeout)?
  3. What PHP and Guzzle version constraints does v4.10.0 declare, and do they collide with our Laravel pin (Laravel 10/11 pin Guzzle 7)?
  4. Is ext-simplexml still hard-required now that strings are tolerated? Could this simplify our base image?
  5. What is the upstream release cadence, and how often do minor releases ship type-affecting changes?
  6. Who owns the TourCMS vendor relationship — account manager escalation path, not GitHub issues?

Integration Approach

Stack fit. Workable but non-idiomatic Laravel. The correct shape is a TourCmsServiceProvider binding a configured singleton, credentials in config/services.php + .env, and a TourCmsGateway interface with an SDK-backed implementation. Controllers, jobs, and console commands depend on the interface only. That single decision contains the blast radius of every future minor release and gives us one place to log request/response pairs.

Migration path. Two independent tracks, do not conflate them:

  1. Version bump 4.9.x → 4.10.0. Do not auto-merge. Branch, bump, run the suite, and triage every diff caused by the string change. If we lack contract tests that assert response shape per endpoint, write them first — this release is the justification.
  2. New capability (customer create/verify). Introduce behind a feature flag, validate in sandbox, then wire into the signup funnel. Ship it as a product increment with its own success metric (e.g. % of signups self-served), not as part of a dependency bump.

Compatibility. Verify explicitly: PHP constraint, Guzzle major (Laravel 10/11 pin 7), whether ext-simplexml remains required, and whether our adapter code assumes object-ness anywhere. If the SDK now tolerates string payloads, we may be able to loosen a dependency — small, but real.

Sequencing.

  1. Baseline contract tests against 4.9.x.
  2. Gateway wrapper refactor (if not already done) — do this before the bump so failures surface in one place.
  3. Bump to 4.10.0, run tests, triage.
  4. Customer create/verify behind flag → staging/sandbox → legal review on PII.
  5. Canary the booking path in production; expand flag.
  6. Document pinned version and string-handling behavior for future maintainers.

Operational Impact

Maintenance. Low code surface — it's a client library, not a service. The recurring cost is upgrade triage, and 4.10.0 proves that even a minor bump can change types. Budget a quarterly upstream review instead of auto-merging Dependabot PRs; pin exact versions in composer.lock and require a green integration suite before any bump. Assign a named owner for the upstream relationship.

Support. Burden concentrates in two places: (a) TourCMS API behavior drift, which the SDK does not shield us from, and (b) business-side questions about the new customer endpoints ("why is this customer unverified?"). Route everything through the gateway so logging is consistent. Set expectations: support is GitHub issues from a small vendor team, not an SLA channel — escalate API-level problems through the TourCMS account manager.

Scaling. Client-side scaling is a non-issue; the SDK is stateless and cheap. Real constraints are upstream rate limits and latency, plus XML parsing cost on large payloads (tour lists, availability grids). Add timeouts and retries at the adapter boundary, cache read-heavy reference data (tours, locations) with short TTLs, and never call booking-critical writes synchronously inside a web request — queue them. Watch memory if the string change implies full-body buffering.

Failure modes.

  • Type drift (highest probability this release): code expecting XML objects receives strings → fatal errors or silent nulls.
  • Silent schema change: upstream renames/adds fields, SDK passes them through, our adapter ignores them. Mitigate with strict contract tests.
  • Entitlement 403: new endpoints not enabled on our plan; surfaces as an opaque booking failure.
  • Partial booking: customer created, booking fails → orphan records. Needs idempotency keys and a reconciliation job.
  • Upstream slowness: no built-in circuit breaker; a slow TourCMS degrades checkout. Timeouts plus a fallback path are mandatory.
  • Dependency conflict: Guzzle/PHP constraint collision blocks a future Laravel upgrade — pin and test early.

Ramp-up. Roughly half a day for a Laravel-fluent PHP developer to install, bind, and issue a first successful call. One to two days to do it properly behind a gateway with contract tests. The customer verification/create work adds about a day of sandbox integration plus product/legal review if customer PII crosses the boundary. No specialist TourCMS knowledge is needed to start, but someone must own the upgrade cadence and vendor relationship — that is the real ongoing commitment, and it is the thing most likely to be left unowned.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
elsayed85/laravel-api-exceptions
ouhssini/laravel-demo-mode
daworks/ncloud-outbound-mailer-driver
gp247/cms
ignibyte/aic-gates
nexa-merchant/blog
novasa/laravel-language-center
opencage/geocode
adolfoholzer/parameters
livenetworks/ln-starter
shitoudev/permissionmanager
johannesclimacus/laravel-tui
hocvt/seotools
vitalybaev/sypexgeo
amphibee/themosis-ignition
gito-me/fast-excel
frankyso/laravel-ipaymu
geolize-studio/laravel-chile
boomerangui/chat
cgv/localized-resource