Una panoramica tecnica di FundCollector, il plugin WordPress per le donazioni di cui curo progettazione e
sviluppo: cosa fa, come è organizzato il codice, con quali servizi esterni dialoga e come gestisce i
pagamenti, che per natura sono asincroni e non sempre arrivano nell'ordine atteso.
Cosa fa il plugin
FundCollector permette a un'associazione, a un ente o a un professionista di ricevere donazioni dal
proprio sito WordPress: crea moduli di donazione personalizzabili, accetta pagamenti con PayPal e
bonifico bancario, registra donazioni e donatori, invia le email di conferma e offre un pannello di
amministrazione con elenchi, filtri e statistiche.
È distribuito in due edizioni. La Free è pubblicata su WordPress.org, quindi il codice
è pubblico e verificabile. La Pro è un secondo plugin che si innesta sul primo e
aggiunge pagamenti con Mollie, donazioni ricorrenti, report CSV e PDF, backup e ripristino dei dati.
Il pannello e i moduli sono tradotti in cinque lingue oltre all'inglese (italiano, francese, spagnolo,
portoghese, tedesco).
~40.000righe di PHP nel plugin Free
~17.000righe di PHP nel plugin Pro
~13.000righe di JavaScript nativo
8tabelle MySQL personalizzate
Architettura
Un «monolite modulare»: un unico plugin, organizzato per aree di responsabilità, non
per servizi separati.
I livelli del plugin Free (a sinistra) e il modo in cui il Pro vi si appoggia (a destra).
Gateway astratti. Ogni metodo di pagamento implementa la stessa interfaccia e viene
creato da una factory: aggiungere un fornitore non richiede di toccare il checkout.
Orchestrazione a eventi. I passaggi principali passano dal sistema di hook di
WordPress. Il Pro estende il Free allo stesso modo, e in questo modo i due plugin restano separati ma
compatibili.
Dati sotto controllo. Donazioni, donatori, form e ricorrenze stanno in tabelle
dedicate, non in post type e meta. Le migrazioni sono versionate e retrocompatibili, perché il plugin
gira su siti in produzione che non devono perdere dati.
Una scelta consapevole. Il monolite modulare è il compromesso giusto per un plugin
WordPress: installazione semplice e compatibilità con l'ecosistema, in cambio di una disciplina rigorosa
sui contratti tra i moduli.
Struttura del codice
Le classi sono raggruppate per dominio. Ecco le cartelle principali.
Cartella
Contenuto
Edizione
includes/core/
Servizi di base: impostazioni, logger, cifratura, migratore del database, gestione dei token del
form, dati temporanei, email e traduzioni.
Free
includes/frontend/
Checkout pubblico: shortcode, rendering dei moduli, gestione dell'invio.
Free
includes/admin/
Gestione di donazioni, donatori e form; statistiche; procedura guidata iniziale; viste del
pannello.
Free
includes/gateways/ e integrations/
Interfaccia e factory dei gateway; PayPal REST, gestione automatica dei webhook, collegamento
guidato dell'account PayPal; bonifico bancario.
Free
includes/blocks/
Blocco per l'editor Gutenberg.
Free
gateways/mollie/, gateways/paypal/
Mollie (collegamento OAuth, pagamenti, webhook) e ricorrenze PayPal basate su abbonamenti e
metodi di pagamento salvati.
Pro
recurring-donations/
Gestore dello stato delle donazioni ricorrenti.
Pro
reports/, backup/, licensing/
Esportazioni CSV e PDF; backup e ripristino con validazione dell'archivio; licenze e
aggiornamenti.
Pro
Che tipo di chiamate fa
Il plugin parla con servizi esterni tramite l'HTTP API di WordPress e, a sua volta,
espone endpoint che altri servizi chiamano.
Webhook di PayPal (eventi PAYMENT.CAPTURE.*, CHECKOUT.ORDER.*)
Firma verificata tramite l'API di PayPal
/wp-json/fundcollector-pro/v1/mollie-webhook e
…/mollie-subscription-webhook
Webhook di Mollie
L'evento non è creduto sulla parola: l'oggetto viene richiesto di nuovo a Mollie
/wp-json/fundcollector/v1/logs
Assistenza tecnica
Token temporaneo e revocabile
admin-ajax.php (oltre 30 azioni)
Modulo di donazione pubblico e pannello admin
Nonce, verifica dei permessi, token anti-doppio invio, honeypot, reCAPTCHA
Le attività differite, come i nuovi tentativi e la riconciliazione, passano da WP-Cron,
lo scheduler di WordPress.
La parte difficile: pagamenti asincroni
Quando il donatore paga, il sito riceve due segnali indipendenti: il ritorno del
donatore e il webhook del fornitore. Non c'è garanzia sull'ordine, e il webhook può arrivare più volte.
Flusso semplificato di una donazione una tantum con PayPal. Il passaggio 6 può arrivare prima o
dopo il 4 e il 5.
Idempotenza. Lo stesso evento può arrivare due volte senza creare due donazioni:
controlli di duplicato, identificatori di richiesta e vincoli di unicità nel database.
Stati intermedi. Una donazione segnalata come «in attesa» viene aggiornata allo stato
definitivo quando arriva l'esito finale, invece di essere scartata come duplicato.
Nuovi tentativi. Per le ricorrenze Mollie, la creazione dell'abbonamento dopo il primo
pagamento attende il mandato e riprova con tempi crescenti tramite WP-Cron.
Tracciabilità. Ogni passaggio è registrato da un logger dedicato, e il registro può
essere consultato dall'assistenza con un accesso temporaneo.
Sicurezza e qualità del codice
Sicurezza
Verifica dei permessi e nonce sulle operazioni di amministrazione.
Sanitizzazione di ogni input ed escape di ogni output.
Credenziali e dati sensibili cifrati nel database con AES-256-CBC.
Backup e ripristino del Pro con validazione dell'archivio e transazioni di database.
Qualità
Test automatici con PHPUnit, e test end-to-end del modulo di donazione con Playwright.
Analisi statica con PHPStan, controllo dello stile con PHPCS, ESLint e Stylelint.
Verifica con Plugin Check, lo strumento di controllo di WordPress.org.
Procedura di build che produce il pacchetto di distribuzione.
Documentazione tecnica interna di architettura, flussi e database.
Le cifre sopra riportate (righe di codice, numero di tabelle) sono quelle del codice
attuale e cambiano a ogni versione. Il plugin Free è consultabile su WordPress.org.