Invio richiesta di Download massivo al servizio web

Ciao a tutti.
Abbiamo accreditato il canale SDICOOP, abbiamo anche ottenuto l’autorizzazione ad essere listati nell’elenco dei provider abilitati.
Tuttavia non riusciamo a inoltrare una richiesta di scarico massivo al servizio https://servizi.fatturapa.it/sm-scarico-file.

L’invio della richiesta avviene senza problemi, il servizio risponde correttamente con l’ID della richiesta creata.

Ma all’interrogazione “dell’esito richiesta” riceviamo sempre un ST02 (scartata), con un vago messaggio “File non conforme al tracciato .
In alcune prove, il messaggio di errore sembra più parlante: “File non conforme al tracciato , Cannot find the declaration of element 'ns1:InputMassivo”, da cui posso immaginare che ci siano problemi di validazione del file XML.

Il servizio come indicato in documentazione richiede di trasmettere un file XML in base64 contenente la richiesta stessa.

Questo l’XML della richiesta:

<?xml version="1.0" encoding="UTF-8"?>
<ns1:InputMassivo
xsi:schemaLocation="http://www.sogei.it/InputPubblico https://www.fatturapa.gov.it/export/documenti/ws/servizimassivi/InputMassivo_v1.4.xsd"
xmlns:ns1="http://www.sogei.it/InputPubblico"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>
	<ns1:TipoRichiesta>
    	<ns1:Fatture>
        	<ns1:Richiesta>FATT</ns1:Richiesta>
            <ns1:ElencoPiva>
                <ns1:Piva>XXXXXXXXX</ns1:Piva>
            </ns1:ElencoPiva>

            <ns1:TipoRicerca>PUNTUALE</ns1:TipoRicerca>
            <ns1:FattureRicevute>
            	<ns1:DataEmissione>
                  <ns1:Da>2024-09-01</ns1:Da>
                 <ns1:A>2024-11-01</ns1:A>
               </ns1:DataEmissione>
            	<ns1:Flusso><ns1:Tutte>ALL</ns1:Tutte></ns1:Flusso>
            	<ns1:Ruolo>CESSIONARIO</ns1:Ruolo>
            </ns1:FattureRicevute>
        </ns1:Fatture>
    </ns1:TipoRichiesta>
</ns1:InputMassivo>

Il file è formalmente corretto (validato da un linter che controlla lo schema)

xmllint --noout --schema schema.xsd input.xml

lo schema è quello indicato nella documentazione.

L’XML così formato viene poi firmato digitalmente tramite

openssl smime -sign -in input.xml -out input.xml.p7s -signer certificato.pem -inkey key.pem -outform DER -nodetach

poi encodato in base64 e aggiunto al tag File assieme ai tags TipoRichiesta e NomeFile all’interno del tag FileRichiesta.

Per completezza di test, abbiamo provato anche a firmare il file usando l’app GoSign di infocert.
Qualcuno che si è imbattuto nello stesso problema saprebbe dirmi come risolverlo? O quantomeno dove questa procedura fallisce?

Sto procedendo cercando di analizzare gli errori e capire quale dei due è più “profondo” rispetto alla procedura.
Mi spiego.
Ho la sensazione che i controlli effettuati dal servizio AdE siano in quest’ordine:

  1. lettura dell’XML
    che nel caso non venga riconosciuto un XML ben formato restituisce un generico “File non conforme al tracciato .
  2. verifica dell’XML con lo schema
    che nel caso il file non passi il check di validità con lo schema, restituisce un più parlante “File non conforme al tracciato , Cannot find the declaration of element 'ns1:InputMassivo
  3. analisi della firma
    passaggio a cui non credo di essere mai arrivato con le richieste.

Spero di essere stato chiaro e di aver fornito tutte le informazioni necessarie a ricevere un aiuto.
Grazie anticipatamente a tutti.

Alla fine ne sono uscito.
Lascio qualche info per i malcapitati che dovessero inciampare in questo problema.

La maniera di costruire la richiesta è questa:

  • Prepare l’elemento input massivo (come da esempio sopra)
  • Encodarlo in base64
  • Includere questo base64 in questa struttura
<?xml version="1.0" encoding="UTF-8"?>
<ns1:FileRichiesta xmlns:ns1="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/ServiziMassivi/input/RichiestaServiziMassivi/v1.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/ServiziMassivi/input/RichiestaServiziMassivi/v1.0 RichiestaServiziMassivi_v1.0.xsd" versione="1.0" Id="_0">
	<TipoRichiesta>FATT</TipoRichiesta>
	<NomeFile>RichiestaMassiva.xml</NomeFile>
	<File>[...base64...]</File>
</ns1:FileRichiesta>
  • Firmare questa struttura XML
  • Encodare di nuovo l’elemento firmato in base64
  • Includere questo nuovo base64 in questa altra struttura
<?xml version="1.0" encoding="UTF-8"?>
<ns1:FileRichiesta xmlns:ns1="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/ServiziMassivi/input/RichiestaServiziMassivi/v1.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ivaservizi.agenziaentrate.gov.it/docs/xsd/ServiziMassivi/input/RichiestaServiziMassivi/v1.0 RichiestaServiziMassivi_v1.0.xsd" versione="1.0" Id="_0">
	<TipoRichiesta>FATT</TipoRichiesta>
        <!-- Nota bene il nome del file-->
	<NomeFile>RichiestaMassiva.xml.p7m</NomeFile>
	<File>[...base64...]</File>
</ns1:FileRichiesta>
  • Inviare la richiesta SOAP
    Nota: Questa la maniera di inviare la richiesta firmata con Cades. Nel caso si volesse usare Xades, il File non deve essere .p7m e deve essere presente il Tag subito dopo il Tag

Spero vivamente di aver aiutato qualcuno con queste info.

1 Mi Piace