udviklr/laravel-cashier-nets
A Laravel Cashier integration for Nets that brings subscription billing and payment handling to your app. Manage customers, plans, payments, and webhooks through a familiar, fluent Cashier-style API.
The v1.5.0 release is an additive capability for a Laravel/PHP subscription billing package. Subscription::recordCheckoutCharge() lets application code retrieve and validate a captured initial checkout payment and make the corresponding transaction available for refunds when the charge webhook is missing or delayed. The release states that manual recording and webhook processing share transaction creation/finalization logic, preserve terminal outcomes, and emit ChargeSucceeded once. It also preserves the mandate lifecycle and renewal schedule, which is important for subscription correctness.
Architecture fit is strong for Laravel applications that already use the package’s subscription, mandate, transaction, and event model. The feature fits naturally as a fallback/reconciliation path after checkout capture, reducing dependence on webhook delivery for refund eligibility. Integration feasibility is favorable because there are no schema or dependency changes and the API is additive. Technical risk is low-to-moderate: low for upgrade/compatibility, moderate for process correctness around idempotency, provider validation, listener rollback behavior, and ensuring the event is not duplicated when both webhook and manual recording occur.
Key questions:
recordCheckoutCharge()?ChargeSucceeded fire transactionally, and how can duplicate emission be monitored?Stack fit is aligned with a standard Laravel/PHP setup: composer-based upgrade, Laravel service container/events/listeners, and likely queueable listeners. Because v1.5.0 has no schema or dependency changes, the migration path is a normal package upgrade with regression testing rather than a database migration project. Compatibility should be high for existing webhook-based flows because recording and webhooks share transaction creation/finalization behavior.
A sensible sequencing plan:
recordCheckoutCharge() as a controlled fallback in the checkout success path or in a reconciliation job for missing charge webhooks.ChargeSucceeded is emitted exactly once across webhook-only, manual-only, and mixed paths.The method should not replace the webhook path blindly. A TPM should position it as a reconciliation/fallback capability with clear ownership: webhook remains primary where available; manual recording covers missing-webhook and recovery scenarios.
Maintenance impact is low because the release is additive and requires no schema or dependency changes. Support impact is moderate: support teams and on-call engineers need guidance on when to use recordCheckoutCharge(), what inputs are mandatory, and how rollback-on-listener-failure should be retried. Scaling impact is manageable but introduces a new reconciliation workload if used as a fallback for missing webhooks; this should be bounded, observable, and idempotent.
Failure modes to plan for:
Ramp-up is modest for Laravel teams already familiar with the package, but documentation should cover the checkout fallback pattern, idempotency expectations, event listener behavior, and reconciliation monitoring. Operational readiness should include alerts for recording failures, listener rollbacks, duplicate ChargeSucceeded emissions, and transactions that remain unavailable for refund despite captured checkout payments.
How can I help you explore Laravel packages today?