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

Smpp Client Bundle Laravel Package

kronas/smpp-client-bundle

Laravel bundle that wraps an SMPP client, letting PHP applications send SMS through an SMSC using the SMPP protocol. Configure the SMSC host, port, and credentials, then submit messages directly from your Laravel app without handling raw SMPP sockets yourself.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit: Poor for a Laravel codebase. kronas/smpp-client-bundle is a Symfony2 bundle — its value-add is Symfony DI wiring (bundle registration in AppKernel, a configuration tree, a container-managed client service). Laravel has no equivalent contract: service providers, facades, and the config repository are structurally different, so the bundle's only real contribution is discarded while its coupling remains. The genuinely useful part is the vendored SMPP implementation (SM\SMPP / SM\SMPPClient, itself forked from onlinecity/php-smpp), which is framework-agnostic and could be wrapped in a Laravel service provider. That means the architectural decision is "adopt a legacy SMPP library and rewrite the glue," not "adopt this package."

Integration feasibility: Low as published. The package targets PHP 5.4–5.6 and Symfony 2.x — both EOL. Modern Laravel (8+) requires PHP 7.3+, Laravel 10 requires 8.1+, so Composer resolution will fail and, if forced, the code will hit removed/deprecated language constructs and conflict with contemporary dependency constraints. There is no maintained install path. A viable path exists but is manual: vendor the SM\* classes, strip Symfony references, audit the socket/session logic, and expose a MessageSender-style interface from a Laravel provider. That is a fork-and-own project, not an integration.

Technical risk: High. Concretely: (1) unsupported PHP runtime with known vulnerabilities and no security response; (2) bus factor of roughly one — 4 stars, 0 dependents, fork-of-a-fork, no issue activity, no version tracking; (3) SMPP is stateful (bind, enquire_link keepalive, deliver_sm for DLRs and MO, reconnect/backoff, UDH/multipart, GSM-7 vs UCS-2 data_coding), which is orthogonal to PHP-FPM's request/response model — the bundle's synchronous design is the wrong shape for production throughput; (4) observability is absent, so DLR correlation and silent-failure diagnosis become bespoke work. Mitigating factor: the protocol surface is well-specified (SMPP 3.4) and testable against SMPPSim, so risk is bounded if the work is scoped as a spike behind an interface rather than as a dependency.

Key questions:

  • What is the target PHP/Laravel version, and is there any service still pinned to PHP 5/Symfony 2 that justifies this artifact at all?
  • Is direct-bind SMPP a hard requirement, or would an HTTP SMS API (Twilio/Vonage-class) satisfy the use case at our volume?
  • What volume, throughput, and DLR-latency requirements apply — i.e., does the unit-economics case for direct bind actually clear the operating cost?
  • Do we already hold SMPP credentials from an SMSC or aggregator that offers a bind, and what are its TLS/version/session-limit constraints?
  • Who owns the fork? Is there named engineering capacity for the socket, reconnect, and DLR-correlation code, and a scheduled exit from it?
  • Are there maintained modern alternatives (a current php-smpp fork, an async SMPP client on ReactPHP/Swoole, or a managed SMPP service) that remove the ownership burden?

Integration Approach

Stack fit: Very poor as-is; acceptable only at the library layer. Treat the bundle as documentation of how someone once wired onlinecity/php-smpp into a container, not as installable software. In Laravel the correct shape is: a MessageSender interface owned by the application, one SmppMessageSender adapter implementing it, a singleton/connection-manager bound in a service provider, and a queue consumer that owns the long-lived session. The transport must be swappable so a commercial HTTP API can substitute without touching call sites — that is the decision-preserving design.

Migration path: Do not migrate to this bundle. Two defensible paths: (a) Spike (2–4 weeks) — vendor and pin the SM\* source, wrap it behind the internal interface, run the session in a supervised worker (queue:work or a dedicated daemon), instrument latency/throughput/DLR and cost against a real aggregator; then decide. (b) Straight to a maintained option — adopt a current SMPP client or a CPaaS/HTTP provider and skip the fork entirely. If the spike succeeds and direct bind is confirmed as strategically valuable, the follow-on is reimplementation on PHP 8 with a maintained client, not hardening the fork. Budget that migration explicitly at spike kickoff so the spike does not silently become the platform.

Compatibility: Assume breakage. Expect PHP 5 idioms (each(), create_function()), Symfony 2 configuration-tree and event-dispatcher dependencies with no Laravel analogue, and Composer conflicts with modern packages. Any Laravel-side code must sit at the interface boundary, and the vendored library should be isolated (separate namespace, pinned commit, no autoloading of the bundle shell) so that a later replacement is a delete-and-replace rather than a re-architecture.

Sequencing: (1) Confirm PHP/Laravel targets and rule out the bundle shell immediately. (2) Validate the vendored SM\* client against the target runtime and a real aggregator sandbox, using SMPPSim for deterministic tests. (3) Define the MessageSender interface and DLR callback contract before writing transport code. (4) Stand up the supervised worker with explicit reconnect/backoff, enquire_link handling, and DLR store. (5) Add queueing, retry, and dead-letter paths. (6) Measure throughput, delivery rate, and per-message cost against the HTTP baseline. (7) Make the buy/build/own decision with data; record the legacy-code exit date if the fork is retained.

Operational Impact

Maintenance: High and permanent if adopted. The upstream is abandoned, so every PHP upgrade, security patch, and bug fix lands on us. The fork-of-a-fork relationship means rebasing onto onlinecity/php-smpp improvements is manual and likely divergent. Owning it also means owning SMPP protocol expertise — encoding edge cases, session state, aggregator-specific quirks — which is a specialized and thin skill set. This is the dominant cost in the business case and should be priced as such, not treated as a one-time integration.

Support: None. No vendor, no maintainer, no security channel, no community of practice around the fork; documentation is thin and Laravel-specific guidance does not exist. Troubleshooting degrades to reading source under production pressure. Any support posture must be internal: a named owner, an on-call expectation for the worker, and a documented runbook for binds, reconnects, and DLR gaps. Compare against a commercial SMS API where retries, status callbacks, and an escalation path are contractual.

Scaling: Structurally constrained. SMPP sessions are long-lived and connection-oriented, which conflicts with PHP-FPM; scaling requires dedicated worker processes, connection management, throughput pacing against aggregator throttles, and horizontal partitioning by session or sender ID. The bundle offers no async story, so queue-native delivery must be built around it. At high volume the operational surface grows superlinearly with the number of binds and vendors — the point at which a managed SMPP service or a CPaaS becomes cheaper than engineering time.

Failure modes: Connection drops and half-open sockets, missed enquire_link windows, aggregator throttling (ESME_RTHROTTLED), encoding faults (GSM-7 vs UCS-2, multipart UDH assembly), DLR loss or mis-correlation, duplicate submit_sm on retry without idempotency keys, stuck or blocked queue workers holding a dead bind, and silent message loss where the submit succeeded but the receipt never arrived. Each needs detection and a defined response: heartbeat monitoring, bounded reconnect with jittered backoff, per-message idempotency, DLR reconciliation against submitted records, dead-letter queueing, and alerting on delivery-rate deltas rather than on exceptions alone. Assume the package provides none of this and scope it as build work.

Ramp-up: High. A new engineer needs SMPP 3.4 fundamentals, the legacy PHP 5 codebase, the vendored library's quirks, and the Laravel worker/queue patterns layered on top — four distinct knowledge areas, with no documentation to shortcut any of them. Expect weeks, not days, before someone can safely operate the bind in production. A maintained library or managed gateway collapses this to a config-and-callback exercise.

Recommendation: Reject kronas/smpp-client-bundle as a dependency. Its only durable asset is the underlying onlinecity/php-smpp code, which we can use directly without the Symfony2 shell. Fund a time-boxed spike behind a MessageSender interface to quantify throughput, delivery quality, and per-message cost of direct bind versus an HTTP aggregator; commit now to a decision date and, if SMPP wins, to a PHP 8 reimplementation on a maintained client. Do not let the fork become default infrastructure by inertia.

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.
socialdept/atp-orm
cboxdk/laravel-assistant-client
socialdept/atp-resolver
socialdept/tenant-domains
tautvydasr/blade-class-names
socialdept/color-scales
maherelgamil/controller
coleus/widgets
coleus/table
coleus/users
coleus/music
coleus/health
coleus/calendar
coleus/notes
coleus/support
coleus/settings
coleus/apps
seampact/laravel
emmyconceptng/laravel-ng-postcode
jjsquady/round-robin