jomweb/billplz
A Laravel package for integrating Billplz, the Malaysian payment gateway. Create and manage bills, redirect customers to secure payment pages, and handle callbacks/webhooks through a clean, configurable API. Supports sandbox and production environments for fast checkout flows.
Market expansion into Malaysia. If the roadmap includes a MYR-priced, Malaysian-market launch, this package de-risks the single hardest dependency in that plan: accepting local payment methods. BillPlz fronts FPX online banking, cards, major e-wallets (TnG, GrabPay, Boost), DuitNow QR and BNPL, subject to your merchant account configuration. That turns "can we even take money in Malaysia?" from a research spike into a scoped ticket.
Payment method prioritization at launch. Because the gateway abstracts the method list behind a hosted checkout, the PM can ship an MVP with FPX + card only and switch on wallets or DuitNow later without a re-integration. This supports a phased launch decision rather than a big-bang "all methods on day one" commitment.
Build vs. buy on the integration layer. The package is MIT-licensed, framework-agnostic, and tracks BillPlz API v3 and beyond, so the build-vs-buy question shifts from "do we write our own BillPlz client?" to "do we own a thin adapter over a maintained one?" Recommendation: buy the client, own the abstraction. Budget the savings (typically one to three engineering weeks per gateway) against the cost of a wrap-and-monitor layer.
Billing model and checkout architecture. Whether to use a hosted redirect flow versus an embedded one, how to model one-off bills versus recurring/subscription charges, and how reconciliation is designed (callback/webhook plus redirect, with signature verification and idempotent state transitions) are all PM-visible decisions. This package makes the redirect + webhook pattern cheap to prototype, so those decisions can be validated with a real transaction in a sandbox week rather than a design doc.
Roadmap feasibility for subscriptions and invoicing. BillPlz's collections/bills model maps cleanly onto invoices and one-time charges; recurring billing is possible but requires product-level decisions on dunning, proration, and revenue recognition that the package will not solve. Use it to prove the collection loop, and treat subscription lifecycle as a separate roadmap item with its own build/buy call.
Vendor and lock-in strategy. The library is a dependency, not the relationship — BillPlz is. That separation is a genuine product asset: it lets you put your own PaymentGateway interface in front, keep the gateway swappable, and negotiate commercial terms from a position where switching cost is measured in adapter code rather than a rewrite.
Sprint scoping and estimates. Use the package's existence as evidence in planning: integration effort drops from "unknown, likely multi-sprint" to a bounded estimate (auth, create bill, verify signature, handle callback, reconcile, test in sandbox). Note the quality signal — a high package score against a low opportunity score means this is a mature, commodity-shaped integration with little differentiation; valuable to adopt, not valuable to fork.
Adopt when:
Look elsewhere when:
For executives. Entering Malaysia requires accepting how Malaysians actually pay — FPX bank transfer and e-wallets dominate, and a card-only checkout will convert poorly. BillPlz provides those rails; this package is the free, MIT-licensed PHP client that connects us to them. It removes roughly one to three weeks of integration work, carries no license cost, and — critically — does not lock us in, because it sits behind our own payment interface and can be replaced without touching product code. The risk to flag is maintenance: it is a small community project, so we should budget a light monitoring and fallback plan rather than assume vendor-grade support. Recommendation: adopt for the Malaysia launch, wrapped in an internal adapter, with a quarterly review of upstream activity.
For engineering. A framework-agnostic BillPlz API v3+ client, MIT, actively released, with no runtime coupling to Laravel beyond an optional service provider. It gives us bill creation, status retrieval, and webhook signature verification out of the box. We should still own: our PaymentGateway contract, idempotent callback handling, reconciliation jobs, retry/backoff, and observability around the payment state machine. Pin the version, wrap the client in one adapter class, and keep the vendor SDK out of the domain layer — that keeps the swap cost low and makes the dependency a one-file decision rather than an architectural one.
How can I help you explore Laravel packages today?