empiricompany / maho-nexi-xpaybuild
Nexi XPay Build embedded card payment for Maho
Package info
github.com/empiricompany/maho_nexi_xpaybuild
Type:maho-module
pkg:composer/empiricompany/maho-nexi-xpaybuild
Requires
- php: >=8.3 <8.6
- mahocommerce/maho: >=26.7.0
README
Modulo di pagamento con form embedded (senza redirect) per carte di credito tramite il gateway XPay Build di Nexi, per Maho.
Compatibilità
| Piattaforma | Versione minima | PHP |
|---|---|---|
| Maho | 26.7.0 | 8.3 — 8.5 |
Descrizione
Modulo di pagamento con form embedded (senza redirect) per carte di credito tramite il gateway XPay Build di Nexi.
I dati della carta (PAN, scadenza, CVV) vengono inseriti direttamente nel checkout tramite iframe gestiti dall'SDK XPay di Nexi: nessun dato sensibile tocca mai il server (compliance PCI-DSS).
Funzionalità supportate
- Form di pagamento con inserimento carta al checkout (hosted fields)
- Due stili di form: CARD (unificato) o SPLIT_CARD (3 campi separati: PAN, scadenza, CVV)
- OneClick / Carte Salvate — il cliente registrato può salvare la carta e pagare con un clic agli acquisti successivi
- Contabilizzazione Immediata (cattura automatica) o Differita (solo autorizzazione)
- Backend: cattura pagamento e contabilizzazione su Nexi in modalità Differita
- Backend: nota di credito online e storno su Nexi (ricordarsi di creare la nota di credito sulla fattura)
- Backend: informazioni complete nella transazione (brand, last4, codAut, transaction ID)
- Dev: log con dettaglio API in
var/log/nexi_xpaybuild.log - Sicurezza: MAC (SHA1) su tutte le richieste/risposte API, verifica timing-safe con
hash_equals - Sicurezza: chiave MAC crittografata nel database
- Sicurezza: rate limiting sugli endpoint AJAX (30 tentativi / 5 minuti per sessione)
- Sicurezza: ownership check sulle carte salvate (un cliente non può usare le carte di un altro)
Requisiti
- Maho 26.7.0 o superiore
- PHP 8.3 o superiore
- Credenziali Nexi XPay attive (Alias + MAC Key)
Installazione
composer require empiricompany/maho-nexi-xpaybuild php maho migrate php maho cache:flush
Configurazione
Vai in System → Configuration → Payment Methods → Nexi XPay Build.
| Campo | Descrizione | Default |
|---|---|---|
| Enable | Abilita o disabilita il modulo | Disabilitato |
| Title | Etichetta visibile al cliente nel checkout | Credit Card (Nexi) |
| Environment | Test / Produzione | Test |
| XPay Alias | Alias fornito da Nexi | — |
| MAC Key | Chiave per il calcolo MAC (crittografata nel DB) | — |
| XPay Card Form Style | SPLIT_CARD: 3 campi separati (PAN, Expiry, CVV) · CARD: form unificato |
CARD |
| Accounting Type | Immediate (cattura subito) · Deferred (solo autorizzazione) |
Immediate |
| New Order Status | Stato per i nuovi ordini creati | Processing |
| Enable OneClick (Saved Cards) | Abilita il salvataggio carte per i clienti registrati | Abilitato |
| Payment from Applicable Countries | Restrizione metodo di pagamento per paese | Tutti i paesi |
| Payment from Specific Countries | Specifica paesi consentiti | — |
| Sort Order | Ordine di visualizzazione nel checkout | 10 |
Test mode: quando l'environment è impostato su Test, il metodo di pagamento è visibile solo agli IP autorizzati in System → Configuration → Developer → Developer Client Restrictions.
Funzionalità OneClick / Carte Salvate
Quando abilitata, la funzione OneClick permette ai clienti registrati di:
- Salvare la carta al momento del pagamento (consenso esplicito tramite checkbox)
- Visualizzare e gestire le carte salvate dalla propria area account (Account → My Payment Cards)
- Rimuovere una carta salvata in qualsiasi momento
- Pagare con una carta già salvata senza reinserire i dati
I token delle carte sono memorizzati nella tabella nexi_saved_cards e contengono solo il token gateway, il PAN mascherato, il brand e la scadenza — nessun dato sensibile del titolare della carta viene salvato.
Flusso di pagamento
- Il cliente seleziona "Credit Card (Nexi)" nel checkout
- Il frontend richiede i dati di pagamento al server (
getPaymentData: alias, importo, MAC, carte salvate) - L'SDK XPay viene caricato e i campi carta (iframe) vengono montati nel form
- Il cliente inserisce i dati e clicca "Place Order"
- L'SDK genera un nonce (con eventuale challenge 3DS)
- Il nonce viene inviato al server (
placeOrder) che autorizza verso Nexi - L'ordine viene creato, la transazione registrata e (se contabilizzazione immediata) la fattura emessa
- Redirect alla pagina di successo
Screen Demo
Licenza
Open Software License (OSL) v. 3.0