A PHP package for connecting to [[https://www.fatturapa.gov.it/export/fatturazione/en/sdi.htm?l=en][Italian Exchange System (aka "SdI")]] web services.
/(Pacchetto PHP per inviare fatture e notifiche ai webservices del SdI)./
Please refer to
See [[https://forum.italia.it/c/fattura-pa][Forum Italia - Fatturazione Elettronica]] for server configuration, interoperability tests, etc. In particular:
Apache configuration :: [[https://forum.italia.it/t/accreditamento-sdicoop-configurazione-ssl-su-apache/3314][Accreditamento SDICoop: configurazione SSL su Apache - Fatturazione Elettroni...]]
Interoperability tests :: [[https://forum.italia.it/t/test-interoperabilita-soluzioni/4370][Test Interoperabilità Soluzioni - Fatturazione Elettronica - Forum Italia]]
Getting started ** Dependencies
PHP >=5.5
~php-curl~
~php-soap~ ** Install *** Composer
composer require taocomp/php-sdicoop-client
*** Manually
*** Namespaces Please note namespace is changed (v0.1.5), it is now ~Taocomp\Einvoicing\SdicoopClient~.
So to use e.g. ~Client~ class:
use \Taocomp\Einvoicing\SdicoopClient\Client;
** Setup According to Italian Exchange System (aka SdI), you need:
Additionally you must provide an endpoint to connect to and the correspondent WSDL for each web service.
You can configure key and certs as follow:
Client::setPrivateKey('/path/to/client.key'); Client::setClientCert('/path/to/client.pem'); Client::setCaCert('/path/to/ca.pem');
You can also configure a proxy if needed:
Client::setProxyUrl('proxy_url'); Client::setProxyAuth('username:password');
And then you can instantiate the client by providing endpoint/WSDL.
Web service ~SdIRiceviFile~ (test) for sending invoices:
$client = new Client(array( 'endpoint' => 'https://testservizi.fatturapa.it/ricevi_file', 'wsdl' => '/path/to/php-sdicoop-client/assets/wsdl/SdIRiceviFile_v1.0.wsdl' ));
Web service ~SdIRiceviNotifica~ (test) for sending notices:
$client = new Client(array( 'endpoint' => 'https://testservizi.fatturapa.it/ricevi_notifica', 'wsdl' => '/path/to/php-sdicoop-client/assets/wsdl/SdIRiceviNotifica_v1.0.wsdl' ));
Or you can pass all parameters (key, certs, wsdl, endpoint) to client constructor:
$client = new Client(array( 'key' => '/path/to/client.key', 'cert' => '/path/to/client.pem', 'ca_cert' => '/path/to/ca.pem', 'endpoint' => 'https://testservizi.fatturapa.it/ricevi_file', 'wsdl' => '/path/to/php-sdicoop-client/assets/wsdl/SdIRiceviFile_v1.0.wsdl' ));
** Send invoices to SdI (web service "SdIRiceviFile")
$fileSdI = new FileSdIBase(); $fileSdI->load('/path/to/invoice.xml'); $response = new RispostaSdIRiceviFile($client->RiceviFile($fileSdI));
// Process response: // ----------------------------------------- // $id = $response->IdentificativoSdI; // $datetime = $response->DataOraRicezione; // $error = $response->Errore; // -----------------------------------------
See ~examples/invoice.php~ for a working example.
You can also send ~\Taocomp\Einvoicing\FatturaElettronica~ objects: see [[https://github.com/taocomp/php-e-invoice-it][https://github.com/taocomp/php-e-invoice-it]].
** Send notices to SdI (web service "SdIRiceviNotifica", endpoint test)
$fileSdI = new FileSdI(); $fileSdI->load('/path/to/notice.xml'); $response = new RispostaSdINotificaEsito($client->NotificaEsito($fileSdI));
// Process response: // ---------------------------------- // $result = $response->Esito; // $discard = $response->ScartoEsito; // $discardFilename = $discard->NomeFile; // $discardFile = $discard->File; // ----------------------------------
See ~examples/notice.php~ for a working example.
You can also send ~\Taocomp\Einvoicing\EsitoCommittente~ objects: see [[https://github.com/taocomp/php-e-invoice-it][https://github.com/taocomp/php-e-invoice-it]].
Thanks to Luca Cristofalo for testing the code on his old PHP 5.5.38. :-)