taocomp / php-sdicoop-client

A PHP package for connecting to Italian Exchange System (aka SdI) web services. (Pacchetto PHP per inviare fatture e notifiche ai webservices del SdI).
GNU General Public License v3.0
22 stars 6 forks source link
client e-invoice einvoice fattura fattura-elettronica fattura-pa fatturazione-elettronica invoice italy open-source opensource php sdi sdicoop soap

+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

See [[https://forum.italia.it/c/fattura-pa][Forum Italia - Fatturazione Elettronica]] for server configuration, interoperability tests, etc. In particular:

*** Manually

*** 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:

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

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