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.
Subscription::recordCheckoutCharge() lets you recover a captured initial payment when the charge webhook is lost, so a paying customer is never left without a refundable transaction on record. This directly supports decisions about how much reconciliation logic your team should own versus delegate to the package.ChargeSucceeded emitted exactly once), customer support can issue refunds on day one without bespoke admin tooling or manual provider lookups.Consider it when:
ChargeSucceeded to fire exactly once — relevant if downstream systems (analytics, entitlements, provisioning) are event-driven and duplicate emissions cause real damage.Look elsewhere or defer when:
For executives: This release removes a class of revenue-integrity and customer-trust incidents. When a payment provider's confirmation message goes missing, we can now still retrieve and validate the captured checkout payment, keep it refundable, and preserve the subscription's renewal schedule — without new database changes, new dependencies, or added infrastructure cost. Practically, it reduces support escalations from "we charged you but can't refund you yet," protects renewal-date accuracy in our revenue reporting, and lets us retire or avoid building an internal reconciliation job.
For engineering: Subscription::recordCheckoutCharge() retrieves and validates a captured initial checkout payment and records its transaction so refunds work even without the charge webhook. Recording and webhooks converge on the same transaction creation and finalization code, terminal outcomes are preserved, and ChargeSucceeded is emitted exactly once — so downstream consumers need no special-casing. Validation requires provider identity, amount, currency, full-charge evidence, and capture timestamp; listener failures roll back the local recording so retries are safe. No migrations, no dependency bumps: it is a drop-in addition suitable for the current release cycle. Recommended follow-up is a thin operational wrapper (scheduled retry plus alerting on repeated failures) rather than new reconciliation logic.
How can I help you explore Laravel packages today?