luigel/laravel-paymongo
Laravel integration for PayMongo, the Philippine payment gateway. Provides an expressive wrapper for payment intents, sources, checkout sessions, webhooks, and related APIs, with configuration, facades, and fluent methods to accept GCash, cards, and other payment methods.
parameter_invalid — directly unblocks the "receive payment status updates" workstream. Any roadmap item dependent on asynchronous payment confirmation (order fulfillment, subscription renewal, refund reconciliation, payout reporting) was previously at risk of shipping with a silently broken registration step. Treat this as the resolution of a known adoption blocker, not a routine patch.payment_intent.succeeded, payment_intent.awaiting_payment_method, subscription.activated, qr.paid, qr.expired, refund.succeeded, dispute.created, dispute.resolved, payout.deposited, payout.returned). Do not plan features that assume these events fire. Notable for roadmap: no refund.succeeded, dispute.*, or payout.* events means refund confirmation, dispute handling, and payout reconciliation must be built on polling the API or manual operations. This is a PayMongo platform constraint surfaced by the package, and it should change how those epics are estimated.WebhookEventType cases and Luigel\Paymongo\Events classes shipped in a patch version (3.0.1). Even though the runtime blast radius is small (these events never fired, so no listener could have been invoked), this is a semver-breaking change in a patch. Justifies pinning the dependency to an exact or tilde constraint and gating upgrades behind the payment test suite.Adopt when:
Events/listeners over a generic HTTP wrapper.payment.paid-class events and WebhookReceived, not the removed payment_intent.* / refund.* / payout.* events.Look elsewhere or wrap carefully when:
WebhookEventType cases and Luigel\Paymongo\Events\* classes before bumping. Any use statement, match arm, listener registration, or config array referencing them will now fail — even though no such webhook was ever delivered.subscription.activated is not available; subscription state must be derived from your own records or API polling.Mitigation note: the fallback is sound. Any unrecognized event name still dispatches WebhookReceived, so an untyped catch-all listener remains a viable safety net for gateway changes that outpace the package.
For executives: We use a maintained Laravel package to integrate PayMongo as our payment gateway. The latest release fixes a defect that could have blocked webhook registration in production — the mechanism by which we learn a payment succeeded. It also removes nine webhook event types that PayMongo never actually sends, which cleans up the integration but tells us something commercially important: PayMongo does not notify us about refunds, disputes, or payouts. Those need to be handled by scheduled polling or manual process, and any roadmap commitment implying real-time refund or payout confirmation should be re-scoped. Net: the fix reduces launch risk; the removals require a small roadmap correction, not new spend.
For engineering: v3.0.1 is functionally a bug fix with a breaking surface. Webhook registration against PayMongo's API no longer returns parameter_invalid from unsupported event types. The removed WebhookEventType cases and Luigel\Paymongo\Events\* classes must be purged from our codebase — use statements, match expressions, listener registrations, and published config. Runtime risk is low (those events were never delivered, so no listener ever executed), but the code will fatal on load if referenced. Two actions: (1) pin the dependency to an exact or ~3.0.1 constraint — a breaking removal in a patch release is a signal to stop floating the version; (2) add regression coverage for webhook registration and for the WebhookReceived catch-all, which is now our forward-compatibility escape hatch for event names the package doesn't model. Also confirm our refund/dispute/payout handling does not assume webhook delivery — if it does, that's a defect we inherited from PayMongo's documented-but-unshipped event list, and it needs a polling design before those features ship.
How can I help you explore Laravel packages today?