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