apility/nets-easy
Laravel integration for Nets Easy payments. Create and manage payment objects, handle callbacks and webhooks, and connect checkout flows with configurable API credentials. Supports common payment operations and provides a clean, practical way to add Nets Easy to Laravel applications.
Market expansion into the Nordics. Nets Easy (Nexi Group) is a dominant payment provider in Norway, Sweden, Denmark and Finland, with strong local method coverage (Vipps, Swish, MobilePay, Dankort, bank transfers) and B2B invoicing support. This package is a PHP client for that REST API — it enters the picture whenever a roadmap item reads "launch checkout in NO/SE/DK/FI" or "support Nordic payment methods."
Build vs. buy (really: adopt vs. wrap). Payments are a classic "buy the provider, build the thin client" decision. A package with 7 stars and 0 dependents does not meaningfully shift the buy side of that equation — it saves perhaps 2–5 developer-days of API plumbing and buys you no support contract, no security response, and no community. The honest framing is: this is a reference implementation to read, not a dependency to adopt at scale. Realistic options for a PM to weigh:
| Option | Effort | Long-term cost | Best when |
|---|---|---|---|
| Adopt package as-is | ~0.5 day | Medium–high (you own it in practice) | Internal tool, low volume, spike |
| Fork + vendor, pin version, own it | 1–3 days | Medium | MVP with a real launch date |
| Write a thin internal client from Nets' REST docs | 5–10 days | Low | Payments are core to revenue |
| Multi-PSP abstraction over the above | 3–4 weeks | Lowest marginal cost per provider | Payments are a strategic capability |
Feature-level decisions it informs. Checkout flows (hosted vs. embedded), authorize/capture/refund/partial-capture lifecycles, recurring and subscription billing via stored cards, webhook handling for settlement and chargeback events, and idempotency behavior on retries. Before committing to any payment feature spec, a PM should confirm the package actually covers it — a 2022-era wrapper may predate newer API capabilities, so treat coverage as unverified until engineering reads the source.
Portfolio and platform strategy. If your product already integrates Stripe or Adyen, adding this package creates a second, unmaintained integration path. That argues for using it only as a temporary bridge behind your own PaymentGateway interface, so the provider — and the package — can be swapped without touching product code.
Where it genuinely earns its keep. Fast validation spikes ("can we take a Vipps payment end to end?"), internal finance/admin tooling, back-office refund utilities, and MVPs where the merchant agreement with Nets already exists and speed beats durability.
Consider it when:
Look elsewhere (or build) when:
composer.json) that captures, partial refunds, subscriptions, and webhook payloads are actually modelled before it lands in a roadmap.Default PM recommendation: time-box a 1–2 day spike. If it clears the required feature list, fork it, pin it, assign a named owner, wrap it behind an internal payment interface, and put "replace or re-fork" on the roadmap as an explicit line item. If it fails the spike, the 5–10 days to write a thin internal client is cheaper than the interest you'll pay on a dead dependency.
For executives — the one-paragraph version: Nets Easy is the practical way to take local payments in the Nordics, and this package is a free (MIT), small PHP helper that shortens the plumbing work by a few days. The catch is maturity: seven GitHub stars, no downstream projects using it, and no release since November 2022. That means no vendor, no support line, and no one else to catch problems. It is a useful accelerator and a poor foundation. The recommendation is to use it to validate Nordic checkout quickly, keep it behind our own payment abstraction so it is replaceable in days, and budget a small amount of ongoing engineering ownership rather than assuming it maintains itself. Cost to try: one to two days. Cost to depend on it blindly: an outage or a security patch we have to write ourselves.
For engineering — the ask:
Fork and vendor rather than depend on the upstream tag; pin the commit; add contract tests against the Nets Easy sandbox; audit what the wrapper does and does not do (webhook verification, idempotency, retry semantics, error taxonomy, currency and rounding handling, and partial capture/refund state transitions). Wrap it in our PaymentGateway interface so the provider is swappable. Confirm PHP version constraints and transitive dependency freshness before it enters the lockfile. Flag anything we'd have to write ourselves so it lands in estimation, not in a surprise mid-sprint.
Risks to state plainly in the decision record: unmaintained upstream, single-maintainer risk, API drift versus current Nets Easy documentation, unverified security posture, and zero ecosystem signal. Each is manageable with a fork and an owner; none is manageable by assuming the package will be looked after.
How can I help you explore Laravel packages today?