A me continua a dare SSLException: protocol version.
Sogei mi ha risposto questo:
La invitiamo a verificare che richiamando il proprio endpoint di test da browser venga sempre richiesto un certificato. In caso contrario la configurazione SSL non è ben definita e le notifiche non possono esser consegnate.
Ho utilizzato il vostro script ma non riesco a farlo funzionare.
la funzione $sdiSoapClient->__getFunctions() mi restituisce correttamente il risultato ma se richiamo $sdiSoapClient->RiceviFile($fileSdIAccoglienza) mi restituisce sempre “Could not connect to host”
Ho provato più volte a ricreare i certificati e sono tutti .pem sembra tutto corretto e non so più che pesci prendere.
Help me please
Rettifico: errore mio che sbagliavo ad utilizzare la classe e quindi non inviava i certificati.
Ora sembra funzionare. Grazie Per il lavoro che fate
Attenzione perchè per il solo invio delle fatture non è necessario installare nulla su apache, i certificati di apache servono solo per la ricezione delle notifiche e delle fatture. Per esempio io gli invii di prova li sto facendo anche da localhost senza neanche usare ssl.
Comunque se leggi bene al link che ho postato sopra spiegano anche come generare i certificati da utilizzare per il client soap.
Sto seguendo anch’io l’esempio con il wrapper settando correttamente tutti i certificati ma ahimè le mie richieste vanno in timeout.
Ho notato che tra le curlopt una non mi viene riconosciuta.
Visto che sei riuscito a inviare una fattura correttamente, posso chiederti la configurazione del tuo server?
In particolare m’incuriosisce la versione di PHP e quella di cURL, da console:
php 7.0.8 e curl 7.55.1 ma dubito sia un problema di versione, piuttosto devi controllare di aver effettuato correttamente la chiamata soap.
Nel mio caso mi ricordo che mi andava in timeout quando il collegamento al wsdl non era corretto, nei logs di apache trovavo un sacco di tentativi di riconnessione perchè continuava a riprovare non trovando il wsdl finchè non andava in timeout.
Se non lo hai fatto scarica e metti il wsdl sul tuo server.
Prova anche a specificare la location dell’endpoint in quanto ho visto che ci mette molto meno a completare la richiesta.
php 5.6.21
cURL 7.29
in questa versione di cURL, l’opt CURLOPT_SSL_ENABLE_ALPN non è presente, quindi non viene applicata.
Purtroppo i file WSDL vengono caricati correttamente (da percorso locale).
I certificati sono settati come nell’esempio e sono raggiungibili e leggibili dal client SOAP.
EDIT: Ho notato che nei file WSDL la location definita per i servizi è un URL http (il che fa sicuramente fallire tutto poiché prova una connessione SSL sulla porta 80). Risulta quindi OBBLIGATORIO definire la location nell’array delle opzioni o comunque prima di fare la chiamata al metodo RiceviFile.
Ora, le mie richieste non vanno più in timeout ma restituiscono l’errore:
unable to load client cert: -8018 (SEC_ERROR_UNKNOWN_PKCS11_ERROR)
Dopo una giornata di sclero, prove e ricerca sono riuscito a risolvere nel più stupido dei modi.
Non potendo aggiornare PHP e cURL dati dei vincoli di operatività con altri progetti nel server, ho attivato la CURLOPT_SSL_ENABLE_ALPN tramite il suo valore effettivo, ossia 226.
Vuoi per via del OS, vuoi per via di PHP, vuoi per via cURL ma la define del nome non c’era, l’opzione invece si, a quanto pare.
Ora, settati correttamente i certificati, tramite il SdiSoapClient ricevo l’effettiva presa in carico del SdI (una ricevuta senza errori e con un identificativo SDI), adesso ci sarà da ridere nella gestione delle notifiche e ricezione fatture dato che a quanto pare i server sono down.
Nel mio caso la mia connessione andava in timeout a causa del fatto che non specificato esplicitamente la location al client, cosa che puoi fare passando un’array che includa l’opzione:
in fase di creazione del client.
Questo perché nel file WSDL che carica il client sono specificati degli endpoint NON https://.
Altrimenti, potrebbe andare in timeout anche se non carica i certificati corretti, ma in tal caso è più probabile che ti restituisca un altro tipo di errore.