menu di navigazione del network

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


(Cesco69) #33

@simevo una curiosità.

Qual’è il ruolo del team digitale? non ho ben capito se siete un team legato a sogei o un entità a parte.


(Simevo) #34

Ciao sul team digitale trovi tutto qui: https://teamdigitale.governo.it/ (è una struttura commissariale a supporto della Presidenza del Consiglio dei Ministri).

Noi (simevo) siamo una startup che oltre a partecipare qui sul forum da un bel po’, da giugno a ottobre 2018 abbiamo affiancato il teamdigitale su SPID e FattturaPA sviluppando moduli, pacchetti e altre cose.


(Alessandro Rolando) #35

@simevo sicuramente quello che manca sono istruzioni per la configurazione virtual host per apache, se vuoi apro una issue come feature request in github.


(Francesco Biegi) #36

Dopo essere riuscito ieri ad inviare la fattura, ora sono impantanato nella ricezione della notifica di esito con errore: General SSLEngine problem

Oltretutto in fase di accreditamento io ho dato come endpoint questi due:
TEST
https://test.dominio.it/sdi/in
https://test.dominio.it/sdi/out

PROD
https://dominio.it/sdi/in
https://dominio.it/sdi/out

Purtroppo però il mio sottodominio ha già un certificato https (senza contare dominio.it che è l’attuale server di produzione, che ha anch’esso il certificato HTTPS)

Dovrei quindi (anche se non ho la più pallida idea se si possa / come fare :smiley: ) riuscire ad installare entrambi i certificati sul server ? (il mio più quello di SDI)

Tra l’altro, io uso nginx ( che già risponde a test.dominio.it) quindi ho dovuto fare un forward di sdi/in verso un server apache (dove volevo installare il certificato dell’SDI)

Voi come avete risolto ? Ho letto un pò di thread ma ho una confusione in testa assurda…

Ho provato poi a spegnere nginx e lasciare acceso solo apache e adesso mi da questo errore:
org.apache.axis2.AxisFault: HTTP ( 301 ) Moved Permanently address : https://26.2.162.231:80

Tra l’altro, non posso nemmeno vedere il wsdl perche sul mio dominio è attivo HSTS.
Quindi non riesco a capire se l’errore è su come ho configurato i certificati (ma li ho fatti come descritto poco sopra in questo thread) o nella classe php che ho scritto (che sono due righe):

<?php

class SdIRiceviNotificaHandler
{
    public function NotificaEsito($parametersIn)
    {
        $xmlString = base64_decode($parametersIn->File);

        return $xmlString;
    }
}

$wsdl = 'wsdl/SdIRiceviNotifica_v1.0.wsdl';

$soapServer = new \SoapServer($wsdl);
$soapServer->setClass('SdIRiceviNotificaHandler');
$soapServer->handle();

(Cesco69) #37

@Francesco_Biegi, NotificaEsito come da wsdl non deve ritornare nulla, quindi:

public function NotificaEsito($parametersIn)
{
    $xmlString = base64_decode($parametersIn->File);
}

per quanto riguarda la configurazione dei certificati sul server, se hai già dei certificati installati non puoi installarne altri. A meno di dinfigurazioni che ignoro, la regola è un solo certificato per host.

A questo punto credo ti convenga rifare l’accreditamento e cambiare gli endpoint.


(Francesco Biegi) #38

@cesco69 si ho già fatto la richiesta ieri. Magari se avessero spiegato un pò meglio le cose avrei evitato di dare un dominio già esistente…

Comunque ora in test ho spento nginx e vado solo con apache, quindi carico solo il certificato dell’agenzia.

Comunque, anche modificando NotificaEsito senza il return ottengo ancora:
org.apache.axis2.AxisFault: HTTP ( 301 ) Moved Permanently address : https://26.2.162.231:80

Ho visto però che il file SdIRiceviNotifica_v1.0.wsdl ha in soapbind:address la url https://servizi.fatturapa.it/ricevi_notifica. Io sto facendo le prove in test, devo cambiarlo in https://testservizi.fatturapa.it/ricevi_notifica ?

Questo è il file di apache:

    <VirtualHost _default_:443>
    	
    	ServerAdmin webmaster@localhost
    	DocumentRoot /myroot


    	ErrorLog ${APACHE_LOG_DIR}/error.log
    	CustomLog ${APACHE_LOG_DIR}/access.log combined


    	<IfModule mod_proxy_fcgi.c>
        	<FilesMatch \.php$>
        		SetHandler "proxy:unix:/run/php/php7.0-fpm.sock|fcgi://localhost/"
         	</FilesMatch>
    	</IfModule>

SSLEngine On

    # certificato firmato dall'Agenzia (fompato ASCII/PEM)
    SSLCertificateFile "certificates/SDI-xxxx-Server.pem"

    # chiave privata usata per generare la richiesta di certificato
    SSLCertificateKeyFile  "certificates/prod_mykey.key"

    # certificato dell’autorità di certificatione dell’agenzia
    SSLCertificateChainFile "certificates/caentrate.der"

    SSLCACertificateFile "certificates/CA_Agenzia_delle_Entrate_all.pem"

    SSLStrictSNIVHostCheck off

    </VirtualHost>

(Cesco69) #40

gli endpoint a cui riferirti sono definiti nel nell’accordo di servizio e sono:

Nome WSDL: SdIRiceviFile_v1.0.wsdl
Endpoint: https://servizi.fatturapa.it/ricevi_file
Endpoint di test: https://testservizi.fatturapa.it/ricevi_file

Nome WSDL: SdIRiceviNotifica_v1.0.wsdl
Endpoint: https://servizi.fatturapa.it/ricevi_notifica
Endpoint di test: https://testservizi.fatturapa.it/ricevi_notifica

Nome WSDL: SdITrasmissioneFile_v2.0.wsdl
Endpoint: https://servizi.fatturapa.it/dati-fattura
Endpoint di test: https://testservizi.fatturapa.it/dati-fattura


(Francesco Biegi) #41

Si, quelli li ho. Quindi nel file SdiRiceviNotifica_v1.0.wsdl ho messo <soapbind:address location=“https://testservizi.fatturapa.it/ricevi_notifica” /> Ma continua a darmi quel maledetto 301 …

Per ricevere la notifica, devo modificare qualche altro file che tu sappia ? La configurazione di Apache ho provato a riguardarla ma mi pare uguale a come l’avevi descritta poco sopra…

Hai mai avuto quell’errore ? Non so piu dove sbattere la testa… e sono solo all’inizio (2° giorno)


(Cesco69) #42

ma non devi modificare i wdls, devi solo indicare la location nel SdiSoapClient, per il client e non fare null’altro per il SoapServer


(Simevo) #43

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


(Andrea Mauro) #44

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.


(Alessandro Rolando) #46

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?


(Francesco Biegi) #47

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


(Cesco69) #48

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


(-----) #50

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


(Cesco69) #51

@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>

(Andrea Mauro) #52

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.


(Simevo) #53

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 !


(Andrea Mauro) #54

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


(Simevo) #55

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