Invio fatture a SdI

Buon giorno,
sono in fase di accreditamento canale.
Usando php (e IIS 10 su sistema operativo Windows Server 2019) ho creato un client per l’invio fatture a SdI di cui riporto qui di seguito alcune righe di principale interesse:

$soapLocation = "SdIRiceviFile_v1.0.wsdl"; 
$params = array (
    'location'  => "https://testservizi.fatturapa.it/ricevi_file",
    'keep_alive'    => true,
    'trace'         => true,
    'passphrase'    => "xxxxxxx",
    'cache_wsdl'    => WSDL_CACHE_NONE,
    'encoding' => 'utf-8', 
    'soap_version' => 'SOAP_SSL_METHOD_SSLv2',  
    'exceptions' => 1, 
    'stream_context' => stream_context_create(
        array(
            'ssl' => array(
                'crypto_method' =>  STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT,
                'verify_peer' => false,  
                'verify_peer_name' => false  
                )   
            )
        )        
);
    // SdiSoapClient è un'estensione di SoapClient di php costruita come indicato in altro post di questo forum
    $client = new SdiSoapClient($soapLocation, $params);
    // certificato con le root concatenate (caentrate.der + CAEntratetest.cer)
    $client->caCertFile = "_Certificati/CA_Agenzia_delle_Entrate_all.pem";
    $client->privateKeyFile =  "_Certificati/private-key-client.key";
    $client->clientCertFile = "_Certificati/SDI-[partitaIva].pem";

$nomeFileFatturaxml = "IT01234567890_FPA01.xml"; 
$strFatturaxmlinput = file_get_contents($nomeFileFatturaxml);
$nomeFileFattura = new nomeFile_Type($nomeFileFatturaxml);
$fileSdIAccoglienza = new fileSdIAccoglienza_Type($nomeFileFatturaxml, trim(base64_encode($strFatturaxmlinput)));
$fileSdIAccoglienza = json_encode($fileSdIAccoglienza, true);
try {
        $nomeFunzioneDaEseguire = "RiceviFile";
        $response = $client->__soapCall($nomeFunzioneDaEseguire, array("parametersIn" => $fileSdIAccoglienza));
        echo "Risposta del server: ".$response;
    } catch (SoapFault $ex) { 
        echo "SdI risponde con un messaggio di errore: <br>";
        echo "Error: ".$ex->getMessage()."<br>";var_dump($ex); 
    }

Evito di riportare l’implementazione php delle classi nomeFile_Type e fileSdiAccoglienza_Type: riporto invece un dumping (abbreviato) del loro contenuto prima della chiamata soap a SdI:

  • nomeFileFattura:
    object(nomeFile_Type)#2 (1) { [“NomeFile”:protected]=> string(23) “IT01234567890_FPA01.xml” }
  • fileSdIAccoglienza:
    object(fileSdIAccoglienza_Type)#3 (2) { [“NomeFile”:protected]=> string(23) “IT01234567890_FPA01.xml” [“File”:protected]=> string(5436) "PH …[byte64_encode del contenuto del file xml della fattura] " }

Eseguendo quanto sopra, ottengo sempre il seguente messaggio di errore:
Error: Internal Error
object(SoapFault)#3 (14) { [“message”:protected]=> string(14) “Internal Error” [“string”:“Exception”:private]=> string(0) “” [“code”:protected]=> int(0) [“file”:protected]=> string(41) “[…omissis…]\InviaFattureASDI.php” [“line”:protected]=> int(81) [“trace”:“Exception”:private]=> array(1) { [0]=> array(5) { [“file”]=> string(41) “[…omissis…]\InviaFattureASDI_new.php” [“line”]=> int(81) [“function”]=> string(10) “__soapCall” [“class”]=> string(10) “SoapClient” [“type”]=> string(2) “->” } } [“previous”:“Exception”:private]=> NULL [“faultstring”]=> string(14) “Internal Error” [“faultcode”]=> string(20) “axis2ns340806:Server” [“faultcodens”]=> NULL [“faultactor”]=> NULL [“detail”]=> string(0) “” [“_name”]=> NULL [“headerfault”]=> NULL }


Qualcuno riesce a chiarirmi come risolvere il problema?
Visto che faultCode = "axiz2ns… ", desumo che il server SdI sia stato raggiunto e che questo sia andato in errore a causa del contenuto del messaggio soap trasmesso… giusto?
Oppure il messaggio non è nemmeno uscito dal mio server e l’errore si è generato tentando di impacchettare il messaggio stesso prima del suo invio? Come posso verificarlo?
Può, invece, trattarsi di un problema di certificati (che peraltro sono quelli forniti da Agenzia delle Entrate)?

Ringrazio per l’aiuto
Carlo

Io ottengo lo stesso errore, ieri riuscivo ad inviare tranquillamente le fatture, ora riprovo e ricevo il medesimo errore, senza alcun dettaglio

Buongiorno, sono riuscito a risolvere l’internal error, lo scrivo perché potrebbe essere utile ad utenti futuri. Io la chiamata la effettuo con una libreria denominata “node-soap” in NodeJs (prima la facevo con C# ma sembrava funzionare soltanto con l’arcaico .NET4.7). In particolare i parametri venivano passati in questo modo all’interno della richiesta soap (tralascio i dettagli come soap:envelope eccetera):

[…]

<File>
<NomeFile>

[…]

Il risultato dopo ore di lavoro tra capire il codice (che aveva smesso di funzionare evidentemente per un refactoring che ha causato ciò che spiegherò nelle righe successive) e chiamate ai tecnici ho provato ad invertire i tag sopra riportati e tutto ha funzionato correttamente.

In definita CONTROLLATE L’ORDINE DEI PARAMETRI… DEVONO essere nel seguente ordine:

<NomeFile>
<File>

Utilizzando la libreria sopra indicata

const fileSdiBaseType: FileSdiBaseType = {
NomeFile: req.query.nomeFile,
File: req.body as string
}

Erano invertire le due proprietà dell’oggetto