Webservice TrasmissioneFatture

Nel codice che ho provato avevo già inserito quella riga di codice.

Ciao, ma la chiamata al servizio come la fai? Come mai c’era un errore nell’xml della tua chiamata?

la procedura che usavo prima mi riportava l’attributo che vale http://www.fatturapa.gov.it/sdi/ws/trasmissione/v1.0/types nel ramo principale invece che sul ramo fileSdIAccoglienza.
Spostandolo sotto e indicando gli attributi vuoti xmlns nei rami NomeFile e File non ho più avuto l’errore 500 dal webservice di SOGEI ma ha trasmesso il file correttamente.
Prova a debuggare la procedura che usi e a farti stampare l’xml della soap che invii, probabilmente anche nel tuo caso qualcosa è diverso.

Buongiorno a tutti,

come molti altri in questo forum sto cercando di interfacciarmi correttamente con i web-service dell’SdI per inviare e ricevere le fatture elettroniche.

Al momento sono ancora concentrato sull’invio; ho completato l’accreditamento, ho ricevuto il kit di test e ho quindi installato i certificati con la procedura suggerita da Dario
Infine, dopo non pochi tentativi e anche grazie a questo forum, sono riuscito ad effettuare l’invio di una fattura XML.

La fattura viene giustamente scartata, ricevo errore “EI01”, e posso vederla nell’area web “Gestione Test Interoperabilità” con il suo bravo elenco di errori.

Il problema sul quale sono ora piantato è che non riesco a ricevere nessuna notifica sul mio web-service TrasmissioneFatture!

Sembra che SdI non riesca a comunicare con il mio web-service e, stando alle informazioni di dettaglio (sempre su “Gestione Test Interoperabilità”) SdI riceve il seguente errore:

org.apache.axis2.AxisFault: HTTP ( 403 ) Forbidden address : https://26.2.162.231:80

Chiedo un aiuto: qualcuno ha avuto, e risolto, questo stesso problema e può darmi una mano?

Io uso IIS 8.5, Visual Studio 2017, Framework 4.5, ASP.NET/VB.NET

Grazie a tutti.

Ciao AngeloV
Sembra un problema di certificati sul tuo server.

D.

Ciao Dario.
Sì, penso anche io si tratti di un problema di certificati, ma non mi ci raccapezzo.

Per installarli ho usato la procedura da te descritta per creare i PFX, quindi li ho importati tramite MMC sia nella cartella “Personale” che in “Autorità di certificazione radice attendibili”.
Infine, da IIS, ho aggiunto il binding https sul sito “Default Web Site” indicando come certificato SSL il “SDI-”.
Ma non funziona, si verifica l’errore 403 (come da post precedente).
Ho anche provato a reinstallare tutto, ricreando i PFX e aggiungendo il certificato SistemaInterscambioFatturaPATest.cer all’istruzione COPY che diventa così:

copy /b caentrate.der+CAEntratetest.cer+SistemaInterscambioFatturaPATest.cer+testservizi.fatturapa.it.pem morecert.pem

Non è servito a niente, l’errore rimane lo stesso.

Ho infine modificato le impostazioni SSL del web-service affinché venga richiesto il certificato SSL (check su “Richiedi SSL” e “Richiedi”); il browser ora chiede il certificato ma in definitiva il problema rimane invariato.
Dove starò sbagliando? Ogni aiuto è benvenuto.

Grazie e buona giornata.

Avete Risolto? ho lo stesso problema… Ho aperto un ticket con Sogei ma non mi hanno ancora risposto…

Salve, con la mia azienda ci stiamo muovendo ora, per la fatturazione elettronica (un pò in ritardo).
Già facciamo la fatturazione, ma vogliamo integrare l’invio tramite SDI.

Ho letto un pò di post sul forum e volevo sapere se ci sono già delle librerie o delle classi che posso utilizzare senza doverle scrivere da zero.

Grazie

Ciao Fabio,
dal tuo post dedico che sei riuscito a superare lo scoglio iniziale dell’autenticazione su cui io sono arenato da tempo.

Ho fatto l’accreditamento del canale, creato i certificati come indicato qui, tuttavia sono sempre al punto in cui aprendo l’url del web service da browser ottengo il messaggio “Forbidden
You don’t have permission to access /SdI2AccoglienzaWeb/SdIRiceviFile_service on this server”.
I certificati ottenuti li installati nei certificati del computer sotto “Autorità di certificazione radice attendibili”.

Ho avuto modo, dopo innumerevoli ticket, di parlare con un tecnico di sogei che a voce mi ha spiegato la procedura, ma non riesci a venirne fuori.

Tu come hai fatto? Non riesco a capire cosa mi manca o dove sbaglio.
Immagino poi una volta superato questo scoglio hai aggiunto il riferimento nel tuo progetto visual studio per poter compilare il codice che hai riportato.

Grazie anticipatamente per l’aiuto

Alessio

Ciao,
io riuscivo a trasmettere sia con questo codice :

private void button4_Click(object sender, EventArgs e)
            {
                FatturaPA_SdIRiceviFile.SdIRiceviFileClient srv = new FatturaPA_SdIRiceviFile.SdIRiceviFileClient();
                FatturaPA_SdIRiceviFile.RiceviFileRequest srvReq = new FatturaPA_SdIRiceviFile.RiceviFileRequest();
                FatturaPA_SdIRiceviFile.RiceviFileResponse srvResp = new FatturaPA_SdIRiceviFile.RiceviFileResponse();

                var binding = CreateMultiFactorAuthenticationBinding();


                ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

                var certificate = new X509Certificate2("C:\\Users\\fabio\\Desktop\\client_SDI-02627890839.pfx");
                var address = new EndpointAddress(new Uri("https://testservizi.fatturapa.it/ricevi_file")); 

                var factory = new ChannelFactory<FatturaPA_SdIRiceviFile.SdIRiceviFileChannel>(binding, address);
                factory.Credentials.ClientCertificate.Certificate = certificate;
                factory.Endpoint.Contract.ProtectionLevel = ProtectionLevel.Sign;
                factory.Credentials.ServiceCertificate.DefaultCertificate = new X509Certificate2("C:\\Users\\fabio\\Desktop\\testservizi.fatturapa.it.cer");
                factory.Credentials.ServiceCertificate.SslCertificateAuthentication = new X509ServiceCertificateAuthentication
                {
                    CertificateValidationMode = X509CertificateValidationMode.None,
                    RevocationMode = X509RevocationMode.NoCheck
                };

                var channel = factory.CreateChannel();
                try
                {
                    srvReq.fileSdIAccoglienza = new FatturaPA_SdIRiceviFile.fileSdIBase_Type();

                    byte[] f = System.IO.File.ReadAllBytes("C:\\Users\\fabio\\Desktop\\IT02627890839_00895.zip");
                    byte[] x = Convert.FromBase64String(Convert.ToBase64String(f, 0, f.Length));
                    srvReq.fileSdIAccoglienza.File = x;
                    srvReq.fileSdIAccoglienza.NomeFile = "IT02627890839_00895.zip";

                    srvResp = channel.RiceviFile(srvReq);
                }
                catch (Exception exc)
                {
                    Console.WriteLine(exc.ToString());
                }


                Console.ReadLine();
            }


            public static System.ServiceModel.Channels.Binding CreateMultiFactorAuthenticationBinding()
            {
                System.ServiceModel.Channels.AsymmetricSecurityBindingElement asbe = new AsymmetricSecurityBindingElement();

                asbe.MessageSecurityVersion = MessageSecurityVersion.WSSecurity11WSTrust13WSSecureConversation13WSSecurityPolicy12BasicSecurityProfile10;
                asbe.InitiatorTokenParameters = new X509SecurityTokenParameters();
                asbe.RecipientTokenParameters = new X509SecurityTokenParameters();
                asbe.ProtectTokens = true;
                asbe.MessageProtectionOrder = MessageProtectionOrder.SignBeforeEncrypt;

                asbe.SecurityHeaderLayout = SecurityHeaderLayout.Strict;
                asbe.EnableUnsecuredResponse = true;
                asbe.IncludeTimestamp = false;
                asbe.SetKeyDerivation(false);
                asbe.DefaultAlgorithmSuite = SecurityAlgorithmSuite.Basic128Rsa15;
                
                CustomBinding myBinding = new CustomBinding();
                myBinding.Elements.Add(asbe);
                myBinding.Elements.Add(new TextMessageEncodingBindingElement(MessageVersion.Soap11, Encoding.UTF8));

                HttpsTransportBindingElement httpsBindingElement = new HttpsTransportBindingElement();
                httpsBindingElement.RequireClientCertificate = true;
                myBinding.Elements.Add(httpsBindingElement);
                

                return myBinding;
            }

sia con questo:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim newEP As ServiceModel.EndpointAddress
    newEP = New ServiceModel.EndpointAddress("https://testservizi.fatturapa.it/ricevi_file")

    Try
        Dim newBind As New ServiceModel.BasicHttpsBinding
        newBind.Security.Mode = ServiceModel.BasicHttpSecurityMode.Transport
        newBind.Security.Transport.ClientCredentialType = ServiceModel.HttpClientCredentialType.Certificate
        newBind.MessageEncoding = ServiceModel.WSMessageEncoding.Mtom

        Dim sdiws As New ServiceReference1.SdIRiceviFileClient(newBind, newEP)
        Net.ServicePointManager.SecurityProtocol = CType(3072, Net.SecurityProtocolType)
        Dim certPath = "C:\\Users\\fabio\\Desktop\\client_SDI-02627890839.pfx"
        Dim ccert = New System.Security.Cryptography.X509Certificates.X509Certificate2(certPath)
        sdiws.ClientCredentials.ClientCertificate.Certificate = ccert

        Dim filefe As ServiceReference1.fileSdIBase_Type = New ServiceReference1.fileSdIBase_Type()
        filefe.File = Nothing
        filefe.NomeFile = "IT02627890839_00895.zip"


        Dim sdiresponse As ServiceReference1.rispostaSdIRiceviFile_Type
        sdiresponse = sdiws.RiceviFile(filefe)
    Catch ex As Exception
        MessageBox.Show(ex.Message.ToString)
    End Try
End Sub

Va bene, però funziona se ha esito positivo l’aggiunto del riferimento al servizio nel tuo progetto visual studio.
Il mio problema, come ti avevo scritto, è ancor prima.
Se in visual studio tento di aggiungere il riferimento al servizio 'https://testservizi.fatturapa.it/ricevi_file ricevo questo errore:

Errore durante il download di ‘https://testservizi.fatturapa.it/ricevi_file/$metadata’.
Richiesta non riuscita con stato HTTP 403: Forbidden.
I metadati contengono un riferimento che non può essere risolto: ‘https://testservizi.fatturapa.it/ricevi_file’.
Richiesta HTTP vietata con lo schema di autenticazione client ‘Anonymous’.
Errore del server remoto: (403) Non consentito.
Se il servizio è definito nella soluzione corrente, provare a compilare la soluzione e ad aggiungere nuovamente il riferimento al servizio.

Non riesco a capire dove sbaglio, che cosa mi manca per autenticarmi.
Il certificato SDI-numero partita iva.pfx è installato nella macchina.

Ciao!
Sto avendo lo stesso problema, EIO1 Error, l’hai risolto?

Se siete pratici di aspetti sistemistici, vi consiglierei di configurare la soluzione GovWay, www.govway.org che permette, fra l’altro, di disaccoppiare facilmente l’invio e la ricezione dall’effettivo processamento nel tuo applicativo.