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
Requires (Dev)
None
Suggests
None
Provides
None
Conflicts
None
Replaces
None
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