SDICoop: configurazione PHP SoapClient / SoapServer (Apache) per invio e ricezione di test

Ottima idea ! noi siamo più orientati verso nginx quindi il README e la dockerizzazione (per ora incompleta) sono basate su nginx ma ci sta che a molti possa servire integrarlo su un sistema tipo LAMP. Quindi sì, grazie fai pure issue+PR

Ciao a tutti, ho visto il vostro progetto su github e in questi giorni come avrete visto ho inserito un po di ticket e di pull request.
Nel mio fork al momento sto lavorando per l’utilizzo dei virtual host al posto di nginx.
Ho dovuto litigare un po con laravel a cui non piace troppo lavorare in un sottodirectory e sto creando un file .htaccess con modrewrite per gestire i vari tipi di routing.
Potete seguire il mio fork qui:


e questo è il branch

Appena riesco a cavare un ragno dal buco mando una pull request, avrò però bisogno di test per capire se ho sputtanato il funzionamento su nginx.

1 Mi Piace

Siete riusciti a intercettare le chiamate dello SdI? Io mi sto ancora picchiando con il server SOAP senza successo. I certificati dovrebbero essere installati correttamente, ho creato un server soap minimale per i test ma non riesco a richiamarlo.

Creando un client soap php mi dice che non riesce a contattare il server (per via forse del certificato che non è pubblico ma rilasciato da AdE, o per via del WSDL che non riesce ad essere risolto).
Provando a chiamare da Postman non riesco a mettere le impostazioni corrette e mi restituisce sempre un errore del genere:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP-ENV:Body>
        <SOAP-ENV:Fault>
            <faultcode>SOAP-ENV:Server</faultcode>
            <faultstring>Procedure 'RicevutaConsegna' not present</faultstring>
        </SOAP-ENV:Fault>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Voi come testate il server?

ciao @arolando, anche io mi sto picchiando con la configurazione del server Apache.

Ho seguito alla lettera tutti i passaggi per installare i certificati ma ottengo:
org.apache.axis2.AxisFault: HTTP ( 301 ) Moved Permanently address : https://26.2.162.231:80

Ho provato a invertire, cambiare, sostituire tutti i certificati ma niente, sempre quell’errore.
Io sto provando la parte di ricezione della notifica: ovvero invio la fattura e aspetto la ricevuta di notifica.

Per vedere se il server soap funziona da mac faccio semplicemente una chiamata all’endpoint usando links (browser testuale).

Risponde, l’endpoint è raggiungibile. Ma poi… buio totale…

Ho aperto un topic per questo errore ma non vorrei che il mio problema fosse duvuto al fatto che in fase di accreditamento ho dato lo stesso file csr per il client e e per il server… ma non sono sicuro al 100%.

puoi provare a chiamare il tuo server in HTTP così aggiri in sviluppo il problema del certificato.

Eccellente idea
Anche noi vorremmo usare Apache
Ma le indicazioni su come configurare il tutto sono un po’ qua’ un po’ la’

@amorosik beh questa è quella che uso io

<VirtualHost *:80>
    DocumentRoot "/app/"
    ServerName sdi.domain.com
    
	LogFormat "%a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
    ErrorLog "/app/log/apache_error.log"
    
    ServerSignature Off
    	
	<Directory "/app/">
	  Require all granted
	  Order allow,deny
	  Allow from all
	</Directory>
</VirtualHost>

<VirtualHost *:443>
    DocumentRoot "/app/"
    ServerName sdi.domain.com
    
    SSLEngine On

	# certificato firmato dall'Agenzia (fompato ASCII/PEM)
	SSLCertificateFile "/app/CERT/SDI-XXXXXXXXXXX-Server.pem"
	
	# chiave privata usata per generare la richiesta di certificato
    SSLCertificateKeyFile  "/app/CERT/private.key"
    
    # certificato dell’autorità di certificatione dell’agenzia
    SSLCertificateChainFile "/app/CERT/caentrate.der"
    
    # concatenazione del certificato dell'autorità di certificazione dell'agenzia 
    # più il certificato dell’autorità di certificazione di test (caentrate.der + CAEntrateTest.der). 
    # In questo modo lo stesso server accetta le chiamate sia dal servizio di test che dal servizio di produzione
    SSLCACertificateFile "/app/CERT/CA_Agenzia_delle_Entrate_all.pem"
    
    SSLStrictSNIVHostCheck off
    
	LogFormat "%a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
    ErrorLog "/app/log/apache_error.log"
    
    ServerSignature Off
    	
	<Directory "/app/">
	  Require all granted
	  Order allow,deny
	  Allow from all
	</Directory>
	
</VirtualHost>

Scusate,
visto che è da un po che sono in ballo con varie pull request mi sapete dire quando riuscite a controllare di nuovo il progetto?
In caso cosa bisogna fare per diventare collaboratori?

Notizia per tutti
Sono appena riuscito a fixare la gestione delle route utilizzando solo apache e modrewrite, appena finito di pulire il codice faccio una pull request.

Ciao se ti riferisci a fatturapa-testsdi, personalmente ci posso guardare nei ritagli di tempo quindi non sarò molto responsive (probabilmente tipo 1 PR/week). Se vuoi diventare collaboratore del repo, contatta il teamdigitale su slack !

Mi puoi dare il canale slack?
E’ questo https://developersitalia.slack.com ?

Yes, ottieni l’invito qui https://slack.developers.italia.it/ poi vai al canale #fatturapa

ciao @cesco69
ho seguito alla lettera le tue indicazioni ma alla ricezione della notifica ricevo l’errore General SSLEngine problem (dal pannello dello sdi, perché da server non ricevo nulla)

Accedendo al mio server il certificato non è valido, mi da errore nel common name (che come da guida deve essere SDI-piva e quindi diverso dal mio dominio), comunque da browser posso vedere il server (senza il certificato verde per intenderci).

Sai quale possa essere il mio errore?

Da browser non sarà mai verde, perchè il certificato non appartiene ad una CA affidabile per chrome.

General SSLEngine vuol dire tutto e niente. Puoi attivare lato server i log ssl di debug e vedere che ti dice:

<IfModule mod_ssl.c>
    ErrorLog /var/log/apache2/ssl_engine.log
    LogLevel debug
  </IfModule>

ho messo loglevel a debug però ancora nulla, stesso problema: da portale vedo la notifica di scarto ma nel log non c’è traccia.

Ho anche provato a inviarmi una richiesta creando un SoapClient sul mio endpoint e la ricevo correttamente…

In questi giorni ho avuto tantissimi problemi, uno dei quali abbastanza anomalo, “Content is not allowed in prolog” durante la fase di ricezione notifica da parte di Sdi.

Questo errore avviene quando all’inizio dell’XML che si invia è presente il BOM (ovvero il file è in formato UTF-8 with BOM).

Per risolvere questo ho modificato:

$fileSdIAccoglienza = new \stdClass();
$fileSdIAccoglienza->NomeFile = basename($fattura);
$fileSdIAccoglienza->File = base64_encode(file_get_contents($fattura));

in

$fileSdIAccoglienza = new \stdClass();
$fileSdIAccoglienza->NomeFile = $filename;
$str = file_get_contents($filePath);
$str = str_replace("\xEF\xBB\xBF",'',$str);
$fileSdIAccoglienza->File = $str;

Sul server ho PHP 7.0 (anche con PHP 7.2 dava lo stesso problema)

se spengo il server la ricevuta di scarto mi da quest’errore
java.io.IOException: Invalid Proxy Server Response

se lo riavvio l’errore diventa
javax.net.ssl.SSLHandshakeException: General SSLEngine problem

almeno al server arriva! Quando ho creato il csr l’ho creato con common name SDI-piva sia per server che per client, è corretto? O per il server avrei dovuto mettere il mio dominio nel common name?

Io ho dovuto rifare l’accreditamento per mettere il dominio nel CSR del server in modo da poterlo installare, ma non riesco a ricevere le notifiche.

Ottengo l’errore dal pannello sogei: ava.io.IOException: Async IO operation failed (3), reason: RC: 107 Transport endpoint is not connected

Potresti scrivermi la tua richiesta per l’invio della fattura, e il server php?
Temo che l’errore della notifica sia dovuto ad un errato invio della fattura lato client (magari usa in autenticazione i certificati che noi mandiamo per autenticarci per invio fattura)

ciao @StefanoV, stai rispondendo a me o a Francesco_biegi?

Avevo risposto a te sul fatto che nel CN server va messo l’hostname per poterlo installare tranquillamente (senza mettere la flag che non controlla il CN).

Riguardo il resto della richiesta puoi tranquillamente ignorare.
Su netsons ottengo quell’errore, mentre su serverplan ottengo l’errore: Invalid Protocol Version, ma almeno arriva…

In questo momento sono bloccato qui comunque…

Ciao cesco69, Abbiamo seguito alla lettera il tuo post, ma continua a darci errore Error 403: AuthenticationFailed.

Sai per caso perchè ?