Skip to main content
Nexi / Nets Payment Gateway for Odoo — A build-to-order Odoo payment provider that connects your checkout to Nexi XPay and Ne — 1/1Illustrative preview

A build-to-order Odoo payment provider that connects your checkout to Nexi XPay and Nets Easy for Italian and

Nordic card acquiring, with 3DS2/SCA, local payment methods, and webhook-based reconciliation. ECOSIRE builds, installs, and supports it for Odoo 17.0/18.0/19.0.

What is Nexi / Nets Payment Gateway for Odoo?

A build-to-order Odoo payment provider that connects your checkout to Nexi XPay and Nets Easy for Italian and Nordic card acquiring, with 3DS2/SCA, local payment methods, and webhook-based reconciliation. ECOSIRE builds, installs, and supports it for Odoo 17.0/18.0/19.0. Built to order by ECOSIRE for Odoo 17, 18, 19 — indicative price from $999.00 USD; request a quote for a scoped proposal.

Key Features

Custom `payment.provider` record inheriting Odoo's provider model, registered in `payment_provider_data.xml` and selectable per website/company
Nexi XPay hosted-checkout integration: create payment order, redirect to the acquirer page, verify the return signature in the Odoo controller
Nets Easy hosted-checkout integration with the same abstraction so a single provider config drives either acquirer per your contract
3DS2 / SCA delegated to the acquirer's hosted flow, keeping the Odoo instance out of PCI card-data scope; authentication result carried back to `payment.transaction`
Cards plus the local Nordic/Italian methods you are enabled for (e.g. Dankort, Nordic wallet redirects) surfaced as selectable options at checkout
Signature-verified, CSRF-exempt webhook controller that reconciles asynchronous notifications against the transaction reference with amount/currency validation
Idempotent state machine on `payment.transaction` (`_set_done`/`_set_pending`/`_set_canceled`/`_set_error`) so retried or duplicate webhooks never double-confirm or double-invoice
Refund support: a credit note / refund action in Odoo calls the acquirer refund API and writes the resulting state back to the transaction
Encrypted provider credentials (merchant id, terminal id, API secret) with sandbox/production environment toggle, exposed only to Payment Administrators
Access control via `ir.model.access.csv` plus record rules; per-company credential isolation for multi-company setups
Standard Odoo sale-order confirmation and invoice posting on successful payment — no bespoke accounting path, so `account.move` stays clean and auditable
Full request/response logging of the gateway dialogue for traceability and dispute investigation, without persisting raw card data
Optional tokenization / save-card for recurring or subscription payments where the acquirer and your Odoo edition support it
Built and tested against Odoo 17.0, 18.0, or 19.0 (Community or Enterprise) matched to your running version

Built to order, done for you

No DIY setup — a working app, built, installed and supported by ECOSIRE.

  1. 1

    You order

    Start with a one-time build price. We scope it with you at kickoff.

  2. 2

    We build & install

    ECOSIRE builds, configures and installs it on your Odoo.

  3. 3

    Go live + support

    You go live in about one working week, with two weeks of go-live support. Defects in the code we deliver are fixed free of charge.

Technical Specifications

Odoo Compatibility
Odoo 17, Odoo 18, Odoo 19
Editions
Enterprise & Community
License
Licence confirmation required
Python Requirement
Python 3.10+
Database
PostgreSQL 12+

About this Product

Italian and Nordic merchants running Odoo eCommerce, subscriptions, or portal invoice payment consistently hit the same wall: Odoo core ships Stripe, Adyen, PayPal, and a handful of others, but there is no native payment.provider for Nexi XPay or Nets Easy. That means the acquirer your bank actually settles with — the one giving you Italian domestic card rates or Nordic methods like Dankort, MobilePay redirection, or Vipps-adjacent flows — cannot take money on your Odoo checkout. Merchants end up bouncing customers to an off-platform hosted page with no reconciliation back into Odoo, or manually reconciling settlements against account.move by hand. Both leak revenue and both break the audit trail.

ECOSIRE builds a first-class Odoo payment provider that inherits payment.provider and payment.transaction and speaks natively to the Nexi XPay / Nets Easy hosted checkout APIs. The __manifest__.py declares a clean dependency on payment (and website_sale where eCommerce is in scope), registers the provider in payment_provider_data.xml, and adds provider-specific credential fields (merchant/terminal id, secret/API key, environment toggle) on the provider model with values encrypted at rest and gated by ir.model.access.csv plus record rules so only Payment Administrators can read them. At checkout the module creates a payment intent/order against the gateway, redirects the shopper to the hosted, PCI-scope-reducing payment page, and returns them to Odoo's controller. 3DS2 / SCA is handled by the acquirer's hosted flow so you stay out of card-data scope; the module simply carries the authentication result back. An inbound webhook controller (CSRF-exempt, signature-verified against the shared secret) reconciles the asynchronous notification: it looks up the payment.transaction by the gateway reference, verifies amount and currency, and transitions the transaction state (_set_done, _set_pending, _set_canceled, _set_error) idempotently so a retried webhook never double-posts. Confirmed transactions flow through Odoo's standard pipeline to confirm the sale order and post the invoice, and refunds are issued from the invoice/transaction using the provider's refund support so a credit note in Odoo triggers the real acquirer refund and writes back the state.

Everything is built to Odoo conventions so it survives upgrades and audits: compute fields use @api.depends, states use standard selection values, the gateway dialogue is logged for traceability, and admin-facing configuration lives in proper XML/OWL settings views rather than hardcoded config. We support Community and Enterprise — the provider works on Community website_sale, and where Enterprise-only flows (e.g. subscription tokenization) are in scope we build against them explicitly. The same provider is available for Odoo 17.0, 18.0, and 19.0, matched to your exact running version.

Because this is build-to-order, we start from your acquirer contract and settlement setup, not a generic template. After a short scoping call we confirm which product (Nexi XPay vs Nets Easy), which methods (cards plus the specific Nordic/Italian local methods you are enabled for), currencies, and whether tokenized/recurring payments are needed. We then build against your sandbox credentials, run the full flow — authorize, capture, 3DS2 challenge, webhook reconciliation, partial and full refund — on a staging database, and hand over installable source, a git repo, docs, and a training session. Typical delivery is one working week from confirmed scope, followed by a post-go-live support window while you take real transactions.

What you get

  • Installable Odoo module source code targeted to your exact version (17.0 / 18.0 / 19.0) and edition (Community/Enterprise)
  • Installation and configuration on your environment, including provider credential setup and sandbox-to-production cutover
  • Technical documentation: architecture, webhook endpoints, credential/security model, and upgrade notes
  • End-user guide plus a live training session for your finance/eCommerce team
  • UAT on a staging database covering authorize, capture, 3DS2 challenge, webhook reconciliation, and partial/full refunds, with a documented rollback plan
  • Post-go-live support window to resolve any issues during your first real transactions
  • Git repository handover with full commit history and tagged release
  • Configuration checklist mapping your Nexi/Nets contract (methods, currencies, terminals) to the deployed provider settings

Who this is for

Italian merchant on Nexi XPay

Runs Odoo eCommerce and needs domestic Italian card acquiring through their Nexi contract at their negotiated rates, with SCA-compliant 3DS2 and clean invoice reconciliation instead of an off-platform hosted page.

Nordic retailer on Nets Easy

Sells across Denmark/Sweden/Norway and needs Nets Easy with local methods (Dankort, Nordic wallets) presented natively at Odoo checkout, with settlements reconciling automatically to sale orders and invoices.

Odoo finance/controller

Owns `account.move` integrity and wants every acquirer settlement, refund, and chargeback reflected as a proper Odoo transaction and credit note — no manual matching, full audit log, no card data on the Odoo box.

Odoo implementation partner / internal IT

Needs a maintainable, upgrade-safe provider that follows Odoo conventions (inherited models, `ir.model.access.csv`, standard states) and ships with a git repo and docs so it can be supported after handover across 17/18/19.

How Nexi / Nets Payment Gateway for Odoo Compares

CriterionECOSIRECustom BuildCompetitorOdoo Native
Nexi/Nets supportPurpose-built provider for XPay and Nets EasyPossible but you build it from scratchRarely covers Italian/Nordic acquirersNot available — no Nexi/Nets provider
3DS2 / SCADelegated to acquirer hosted page, result reconciledMust implement and test yourselfVaries; often incompleteOnly for bundled providers (Stripe/Adyen)
Webhook reconciliationSignature-verified, idempotent state machineYou design idempotency and matchingOften basic or missingOnly for supported providers
RefundsCredit note triggers real acquirer refundExtra scope to buildSometimes manual-onlyN/A for Nexi/Nets
Odoo version fitBuilt and tested on your 17/18/19Depends on your team's version expertiseMay lag latest releaseShips with core, but no Nexi/Nets
Fit to your contractScoped to your methods, currencies, terminalsFully bespoke but slowerGeneric config, one size fits allN/A
Support & handoverDocs, training, git repo, support windowYou own all maintenanceVendor-dependent, variableCommunity forums only
Total effort for youScoping call, UAT sign-off, go liveHigh — spec, build, test, maintainBuy then integrate/troubleshoot gapsCannot use this acquirer at all

Frequently Asked Questions about Nexi / Nets Payment Gateway

How long does delivery take?

This is build-to-order, not an instant download. After a short scoping call to confirm your acquirer (Nexi XPay or Nets Easy), methods, currencies, and whether recurring payments are needed, typical delivery is one working week from confirmed scope. We build against your sandbox first, run full UAT on staging, then cut over to production.

Do you handle ongoing support and Odoo version updates?

Yes. Every build includes a post-go-live support window, and we hand over a git repo, source, and docs. Because the module follows Odoo conventions (inherited `payment.provider`, standard transaction states, `ir.model.access.csv`), it upgrades cleanly. We can migrate it to a newer Odoo version or extend it under a separate support/retainer arrangement.

Is my Odoo server in PCI scope?

No card data touches your Odoo instance. We integrate the Nexi XPay / Nets Easy hosted checkout, so the shopper enters card details on the acquirer's PCI-compliant page and 3DS2/SCA runs there. Odoo only receives and reconciles the signed result, which keeps your PCI scope minimal.

Does it work with Community or do I need Enterprise?

The provider works on Odoo Community with `website_sale` and on Enterprise. Card checkout, webhooks, and refunds are edition-agnostic. Certain flows like subscription tokenization depend on Enterprise apps; if those are in scope we build against them explicitly and confirm during scoping.

How are payments reconciled back into Odoo?

A signature-verified webhook controller matches each acquirer notification to its `payment.transaction` by reference, validates amount and currency, and transitions state idempotently. Confirmed payments run through Odoo's standard pipeline to confirm the sale order and post the invoice, so your `account.move` reflects real settlements automatically.

Can it issue refunds?

Yes. Refunds are driven from the Odoo invoice/transaction and call the acquirer's refund API, then write the resulting state back to the transaction. Both partial and full refunds are covered and tested during UAT.

Which Odoo versions do you support?

Odoo 17.0, 18.0, and 19.0. We build and test against your exact running version so the module matches your ORM, controller, and payment-framework APIs rather than assuming a generic release.

Request a quote

Nexi / Nets Payment Gateway

A build-to-order Odoo payment provider that connects your checkout to Nexi XPay and Nets Easy for Italian and Nordic card acquiring, with 3DS2/SCA, local payment methods, and webhook-based reconciliation. ECOSIRE builds, installs, and supports it for Odoo 17.0/18.0/19.0.

  • Custom `payment.provider` record inheriting Odoo's provider model, registered in `payment_provider_data.xml` and selectable per website/company
  • Nexi XPay hosted-checkout integration: create payment order, redirect to the acquirer page, verify the return signature in the Odoo controller
  • Nets Easy hosted-checkout integration with the same abstraction so a single provider config drives either acquirer per your contract
  • 3DS2 / SCA delegated to the acquirer's hosted flow, keeping the Odoo instance out of PCI card-data scope; authentication result carried back to `payment.transaction`

Request a Quotation

Tell us about your Nexi / Nets Payment Gateway requirements and we'll send pricing, licensing options and a tailored proposal — usually within one business day.

No payment now. This sends a quote request to our team — we'll follow up by email with pricing and next steps.