php-sdicoop-client icon indicating copy to clipboard operation
php-sdicoop-client copied to clipboard

A PHP package for connecting to Italian Exchange System (aka SdI) web services. (Pacchetto PHP per inviare fatture e notifiche ai webservices del SdI).

#+TITLE: PHP SdICoop - Client

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

  • [[https://github.com/taocomp/php-sdicoop-server][PHP SdICoop - Server]] to implement your web services required by SdI
  • [[https://github.com/taocomp/php-e-invoice-it][PHP E-invoice It]] for managing italian e-invoice and notice XML formats

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 #+BEGIN_SRC composer require taocomp/php-sdicoop-client #+END_SRC

*** Manually

  • Clone/download the repository
  • ~require_once('/path/to/php-sdicoop-client/vendor/autoload.php');~

*** Namespaces Please note namespace is changed (v0.1.5), it is now ~Taocomp\Einvoicing\SdicoopClient~.

So to use e.g. ~Client~ class: #+BEGIN_SRC use \Taocomp\Einvoicing\SdicoopClient\Client; #+END_SRC

** Setup According to Italian Exchange System (aka SdI), you need:

  • a client key
  • a client certificate
  • a CA certificate to send invoices and notices to SdI web services.

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: #+BEGIN_SRC Client::setPrivateKey('/path/to/client.key'); Client::setClientCert('/path/to/client.pem'); Client::setCaCert('/path/to/ca.pem'); #+END_SRC

You can also configure a proxy if needed: #+BEGIN_SRC Client::setProxyUrl('proxy_url'); Client::setProxyAuth('username:password'); #+END_SRC

And then you can instantiate the client by providing endpoint/WSDL.

Web service ~SdIRiceviFile~ (test) for sending invoices: #+BEGIN_SRC $client = new Client(array( 'endpoint' => 'https://testservizi.fatturapa.it/ricevi_file', 'wsdl' => '/path/to/php-sdicoop-client/assets/wsdl/SdIRiceviFile_v1.0.wsdl' )); #+END_SRC

Web service ~SdIRiceviNotifica~ (test) for sending notices: #+BEGIN_SRC $client = new Client(array( 'endpoint' => 'https://testservizi.fatturapa.it/ricevi_notifica', 'wsdl' => '/path/to/php-sdicoop-client/assets/wsdl/SdIRiceviNotifica_v1.0.wsdl' )); #+END_SRC

Or you can pass all parameters (key, certs, wsdl, endpoint) to client constructor: #+BEGIN_SRC $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' )); #+END_SRC

** Send invoices to SdI (web service "SdIRiceviFile") #+BEGIN_SRC $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; // ----------------------------------------- #+END_SRC

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) #+BEGIN_SRC $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; // ---------------------------------- #+END_SRC

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]].

  • Credits We want to thank all contributors of [[https://forum.italia.it/c/fattura-pa][Forum Italia - Fatturazione Elettronica]] who have shared their snippets and any available info.

Thanks to Luca Cristofalo for testing the code on his old PHP 5.5.38. :-)

  • License GPLv3.