PHP: gestione formato XML di fatture e notifiche (più client e server)

UPDATE

Aggiornato il pacchetto per la gestione del formato XML di fatture e notifiche, nuovo repository:

https://github.com/taocomp/php-e-invoice-it

  • Utilizzo di DOMDocument e DOMXpath
  • Aggiunta di bodies (lotto di fatture)
  • Aggiunta di dettaglio linee
  • Normalizzazione XML (rimozione nodi vuoti)
  • Possibilità di settare lo stesso valore per più elementi
  • Possbilità di settare più elementi via-array

Esempi:

Nuova fattura:
$invoice = new FatturaElettronica('FPA12');

Da file:
$invoice = new FatturaElettronica('/path/to/invoice.xml');

Lotto di fatture:
$invoice->addBody(2);

Aggiunta di linee dettaglio (al secondo body):
$invoice->addLineItem(3, 2);

Settaggio valori:
$invoice->setValue('ProgressivoInvio', 10001);

$invoice->setValues('IdTrasmittente', array(
'IdCodice' => '09876543210',
'IdPaese' => 'IT'));

$invoice->setValues('CedentePrestatore/Sede', array(
'Indirizzo' => 'VIA UNIVERSO 1'));

$invoice->setValues('CessionarioCommittente', array(
// CessionarioCommittente/DatiAnagrafici/CodiceFiscale
'DatiAnagrafici/CodiceFiscale' => '01234567890',
// Denominazione, somewhere inside CessionarioCommittente
'Denominazione' => 'BETA SRL'));

$body2 = $invoice->getBody(2);
$invoice->setValue('Numero', 44, $body2);
$invoice->setValue('Data', '2018-12-12', $body2);

$invoice->setValuesToAll('DatiGenerali', array(
// All "RiferimentoNumeroLinea" somewhere inside DatiGenerali
'RiferimentoNumeroLinea' => 1,
// All "IdDocumento" somewhere inside DatiGenerali
'IdDocumento' => 4455,
// All "NumItem" somewhere inside DatiGenerali
'NumItem' => 1));

Aggiunta elementi:
$invoice->addElement('PECDestinatario', 'DatiTrasmissione');
$invoice->setValue('PECDestinatario', 'pec@example.com');

Salvataggio fattura (filename determinato automaticamente):
$invoice->save();

Creazione di un template da usare in seguito (filename custom):
$invoice = new FatturaElettronica('FPR12'); $invoice->setValue('IdTrasmittente/IdCodice', '00011122233'); $invoice->setValue('IdTrasmittente/IdPaese', 'IT'); $invoice->setFilename($filename); $invoice->setPrefixPath($prefixPath)->save();

Creazione nuona notifica:
$notice = new EsitoCommittente();

Settaggio valori:
$notice->setValuesFromInvoice($invoice, 2);
$notice->setValue('IdentificativoSdI', 1234567);
$notice->setValue('Esito', EsitoCommittente::EC01);

Salvataggio:
$notice->setFilenameFromInvoice($invoice, '_EC_001');
$notice->save();

Ora utilizza DOMDocument e DOMXpath.
Altre info nel README del repository (e spulciando nel codice per il momento… :slightly_smiling_face:).


Ciao a tutte/i,
abbiamo rilasciato su Github tre progetti per l’implementazione della fatturazione elettronica in PHP:

Come scritto nei README dei repositories, ringraziamo tutti i contributors di questo forum per i loro snippets, suggerimenti, condivisione di informazioni.
Citare tutti sarebbe impossibile, ma devo necessariamente fare un eccezione con @cesco69, anche perché ho ampiamente usato la sua classe SdiSoapClient e non ho ancora la possibilità di inviare messaggi privati agli utenti… :slightly_smiling_face:

Ça va sans dire, il codice è rilasciato con licenza GPLv3.

Grazie anticipatamente per pull requests, suggerimenti, integrazioni, critiche, ecc.

– aded

4 Mi Piace

Ottimo! anche se forse ormai è un po’ tardi, ormai siamo agli sgoccioli!

comunque sarà un ottimo modo per condividere soluzioni e miglioramenti per il futuro!

PS. ti consiglio di scrivere un messaggio anche nella mia discussione dove ci sono molti utenti che hanno usato php per implementare lo Sdi

2 Mi Piace

Invio della fattura al SdI con il pacchetto https://github.com/taocomp/php-sdicoop-client:

$invoice = new FatturaElettronica('FPR12');
// ...settaggio valori...

Client:
Client::setPrivateKey('/path/to/client.key');
Client::setClientCert('/path/to/client.pem');
Client::setCaCert('/path/to/ca.pem');

$client = new Client(array(
'endpoint' => 'https://testservizi.fatturapa.it/ricevi_file',
'wsdl' => '/path/to/wsdl/SdIRiceviFile_v1.0.wsdl'
));

Invio dell’oggetto fattura:
$fileSdI = new FileSdIBase();
$fileSdI->load($invoice);
$response = new RispostaSdIRiceviFile($client->RiceviFile($fileSdI));

Response:
$id = $response->IdentificativoSdI;
$datetime = $response->DataOraRicezione;
$error = $response->Errore;

Si procede analogamente per le notifiche (puntando all’endpoint delle notifiche col relativo WSDL). Vedere il readme e gli esempi del repository per il codice completo.

1 Mi Piace

Salve aded,
ti ringrazio per i tuoi preziosi codici che mi sto studiando
Non sono un esperto ai tuoi livelli ma mi sto prodigando a fare un gestionale che genera gli xml delle mie fatture che inizialmente voglio trasmettere tramite mail!

Un dubbio mi assale, e dopo aver letto decine di pagine di guide ,form e codici non mi è chiaro quanto segue

Se io ultimo il mio codice che genera le mie fatture in formato xml e le invio tramite pec non dovrebbero esserci problemi

A cosa serve generare ed inviare notifiche al sistema di interscabio?

Perdona la mia domanda sicuramente stupida

Ciao Luca,

sono contento che il codice sviluppato possa essere utile anche ad altri! :slight_smile:

Devi generare e inviare le notifiche solo se invii/ricevi la fatture attraverso il servizio SdICoop, quello che fa uso dei webservices (tuoi e dello SdI).
Se invii le fatture via PEC non hai bisogno di mettere su dei webservices per ricevere le notifiche perché ti arriveranno via-PEC.

Qui più info:
https://www.fatturapa.gov.it/export/fatturazione/it/c-13.htm

In particolare:

Il soggetto che utilizza il canale PEC riceverà, sulla casella di PEC da cui ha effettuato la trasmissione, i file messaggio prodotti dal SdI relativi al proprio invio.

Fammi sapere se è tutto chiaro.
In bocca al lupo per il tuo gestionale ed “happy coding” :slight_smile:

ciau aded , Hai qualche email dove posso contattarti?
In questo momento desidero inviare una fattura elettronica attraverso il mio sito Web, ma non capisco molto di php

considera sempre che come requisito per utilizzare queste librerie, devi richiedere l’accreditamento all’agenzia delle entrare. poter caricare dei certificati sul server e poter estrarre le CSR.
https://sdi.fatturapa.gov.it/SdI2FatturaPAWeb/AccediAlServizioAction.do?pagina=accreditamento_canale_next

Nel caso tu non possa ottenere tali informazioni, non potresti inviare/ricevere le fatture

1 Mi Piace

grazie daniele,
potresti aiutarmi a realizzare questo sistema in php e quanto mi costerebbe?

Va vista la situazione in cui ti trovi.
hai scritto che vuoi inoltrare la fattura elettronica tramite il sito quindi immagino tu sia un’azienda che gestisce già il sistema di fatturazione.
Per il sito hai acquistato uno spazio web oppure hai preso un server dove hai caricato il sito?
Se hai preso solo lo spazio web, non potendo accedere alle configurazioni del server, è probabile che te non riesca a gestire la fatturazione elettronica.
inoltre la fattura la vuoi inoltrare dal gestionale per eventuali acquisti e-commerce oppure è un servizio dove generi la fattura per conto del fornitore?

Eventualmente scrivimi in privato qualche dettaglio in più su cosa ti serve effettivamente e in che situazione ti trovi che se posso aiutarti o darti qualche consiglio.

Ho l’hosting e il caricamento sul web, è un sito web creato con php mysql che utilizzo come amministratore in cui ho prodotti, registro vendite, fatture.
ma ora ho bisogno di inviare fatture elettroniche attraverso questo sito Web o comunque creare un nuovo sito Web PHP da zero

Ciao, grazie per aver messo a disposizione i vostri codicei.
Il mio problema è questo, ho un db (MYSQL) dove ho i dati utili per poter :

  1. generare una fattura elettronica
  2. Inviare il documento in formato XML alla PA o in alternativa caricarla direttamente dal portale di ADE

Ho scaricato i tuoi esempi ma non ho capito come poter inviare i dati dal DB ai moduli sopra esposti, in modo da poter generare appunto un documento, mi potresti aiutare con qualche esempio o suggerimento ?

Ringrazio in anticipo

1 Mi Piace