laranex/laravel-myanmar-payments
Laravel Myanmar Payments helps you add Myanmar payment gateways and wallets to Laravel apps with a clean, configurable API for payment requests, callbacks, and transaction handling—reducing boilerplate so you can ship local checkout flows faster.
Architecture fit. laranex/laravel-myanmar-payments is a Laravel-native wrapper that puts Myanmar's domestic payment rails — KBZ Pay, Wave Money, CB Pay, and others — behind a single driver-based manager. The shape is conventional and appropriate: a service provider, a publishable config file, per-gateway drivers resolved through the container, and a fluent request object for initiation, refund, and status calls. For a Laravel monolith or modular monolith selling into Myanmar, this is the correct architectural slot — credentials live in config/ + .env, webhook handling is centralised rather than scattered across controllers, and gateway-specific signing logic is not reimplemented per feature. It is the wrong tool if you need multi-tenant credential routing (merchants with their own PSP accounts), non-Laravel services hitting the same rails, or gateways outside the supported set; in those cases you are writing an adapter anyway and the package becomes a partial convenience.
Integration feasibility. Mechanically low-effort: composer require, publish config, populate per-gateway credentials, register the callback routes, implement whatever callback/payment contracts the package exposes. The genuine effort is not wiring but hardening the money path around the abstraction — idempotency keying, signature verification at the edge, a persisted state machine (initiated → pending → paid → refunded → failed), and reconciliation against PSP settlement files. The single most important feasibility question is whether the package's webhook handler verifies each gateway's signature as a first-class behaviour, or merely parses the payload and hands it to you. If the latter, that hardening is entirely your scope and should be budgeted as such.
Technical risk. This is the dominant concern and it is not close.
v4.0.0-alpha.17 — the seventeenth alpha of a major rewrite. Semver guarantees nothing pre-release, and seventeen alphas is a strong empirical signal of unstable class names, config keys, driver interfaces, and event names between iterations. Treat every bump as breaking until proven otherwise.Key questions to resolve before adoption.
Stack fit. Assumes a Laravel application on PHP 8.1+, Composer, and the standard HTTP client / queue / event stack. It is explicitly not framework-agnostic. Any part of the payments surface living outside Laravel — a settlement service, a storefront BFF, a mobile backend in another language — bypasses the package and needs a shared internal payments contract so the two paths cannot diverge on status semantics.
Migration path. Do not rip out a working gateway integration for an alpha. Introduce the package behind an internal PaymentGateway interface you own, with one adapter per PSP and Laranex as the engine inside each adapter. This buys three things: an escape hatch if an alpha bump breaks the public API, a single place to normalise the package's result objects into your own domain events and statuses, and the freedom to run one gateway on the package and another on a direct integration while you evaluate. Pin exactly — "laranex/laravel-myanmar-payments": "4.0.0-alpha.17" with minimum-stability: dev and prefer-stable: true. Never a floating ^4.0@alpha constraint on a payments dependency. Commit the lockfile.
Compatibility. Because alphas are unstable by construction, each bump is a potentially breaking upgrade: read the commit diff rather than the release notes, republish and diff the config file (silently renamed keys are the classic alpha-upgrade failure), and run the integration suite against gateway sandboxes before staging. Maintain a written record of which package internals you touch, so a diff review is scoped rather than open-ended.
Sequencing.
PaymentGateway interface, your own webhook endpoint with signature verification and idempotency enforced at the database, package used only for outbound initiation and payload normalisation.Budget roughly 2–3 days for the spike and 1–2 sprints for a hardened single-gateway production integration including reconciliation and ops runbooks.
Maintenance. Expect recurring, unpredictable upgrade work for the duration of the alpha. Assume a small but non-zero tax per bump: diff review, sandbox regression, occasional fixes. Two mitigations: keep the adapter layer as the real product so the package is a swappable detail, and pre-agree a fork policy — if the maintainer goes quiet mid-alpha, you vendor a copy you control rather than block. Also budget for the maintenance nobody plans: gateway-side API and onboarding-policy changes the package may not track promptly. If you are not prepared to read and patch the source, you are not prepared to depend on it.
Support. Likely single-maintainer, GitHub-issues-based, no SLA, no escalation path. For a revenue-critical payment path that is a genuine gap rather than an inconvenience. Before this becomes load-bearing, name an internal owner who can read the package source and patch a fork, and confirm whether any commercial or consultancy arrangement exists. Record a documented "abandonment trigger" — e.g. no release or issue response for 90 days — that forces a fork-or-replace decision.
Scaling. The package is not the bottleneck; the PSP REST APIs and their per-gateway rate limits are. Scale by moving outbound initiation and webhook processing onto queues rather than executing inline in the checkout request, keeping webhook handlers fast and idempotent (unique constraint on gateway transaction ID + internal order ID), and retrying only on well-defined transient failures. Watch per-gateway concurrency ceilings and any synchronous package call sitting in the user-facing latency path. Signature verification and status writes should be the only work done synchronously in the webhook.
Failure modes to design for.
config:cache into the rotation runbook.Each of these needs a detection path — alerting on unmatched settlements, webhook 4xx rates, pending-age thresholds, signature-failure counts — not just a retry.
Ramp-up. A mid-level Laravel developer can get a sandbox transaction working in about a day from the package's examples. Reaching production grade — adapter layer, signature verification, idempotency, reconciliation, runbooks, settlement-mismatch alerting — is a 1–2 sprint effort for the first gateway. Each additional gateway then costs days rather than weeks once the pattern and the ops playbook exist.
Overall recommendation: architecturally well-shaped for the problem and cheap to trial, but adopt only behind an internal abstraction, pinned to an exact alpha, with sandbox regression tests and a reconciliation job in place before it touches real money — and treat the empty release notes as a standing obligation to review diffs manually rather than a one-off annoyance.
How can I help you explore Laravel packages today?