Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   SII -Nuevo sistema de la Agencia Tributaria española de envío de datos vía Webservice (https://www.clubdelphi.com/foros/showthread.php?t=91252)

Nasca 15-03-2017 20:37:06

Portal de SII:
http://www.agenciatributaria.es/AEAT...VA__SII_.shtml

Información técnica:
http://www.agenciatributaria.es/AEAT.internet/SII.html

Acceso al portal de pruebas del SII, con certificado digital siempre:
https://www7.aeat.es/PRE-Exteriores/...formacion.html

jlegido 15-03-2017 20:55:05

Cita:

Empezado por Nasca (Mensaje 514377)
Portal de SII:
http://www.agenciatributaria.es/AEAT...VA__SII_.shtml

Información técnica:
http://www.agenciatributaria.es/AEAT.internet/SII.html

Acceso al portal de pruebas del SII, con certificado digital siempre:
https://www7.aeat.es/PRE-Exteriores/...formacion.html

Hola Nasca,
OK la direccion de Acceso al portal de pruebas del SII, pero efectivamente si la pones en el navegador te manda a la pagina
https://***.agenciatributaria.gob.es.../erro4033.html donde te explica que no puedes acceder si no es con certificado.

Yo tengo el certificado, mi pregunta es ¿ Si se accede via navegador como se pone el certificado (es un archivo pfx, p.e. Certificado.pfx y como se pone la clave) y si no es via navegador, tienes alguna indicacion para hacerlo por codigo.

Gracias mil por tu info

-Los *** son porque no puedo poner enlaces

Nasca 15-03-2017 21:03:14

Cita:

Empezado por jlegido (Mensaje 514378)
Hola Nasca,
Yo tengo el certificado, mi pregunta es ¿ Si se accede via navegador como se pone el certificado (es un archivo pfx, p.e. Certificado.pfx y como se pone la clave) y si no es via navegador, tienes alguna indicacion para hacerlo por codigo.

En este caso es todo en un navegador estándar. Son formularios web.
Si tienes instalado el certificado en el navegador cuando vayas a esa URL te pedirá el mismo. Si no es así instala el *.pfx en el mismo.

jlegido 15-03-2017 21:19:08

Cita:

Empezado por Nasca (Mensaje 514379)
En este caso es todo en un navegador estándar. Son formularios web.
Si tienes instalado el certificado en el navegador cuando vayas a esa URL te pedirá el mismo. Si no es así instala el *.pfx en el mismo.


Joer, en estos momentos estoy un poco espeso y no se me habia ocurrido, pues el uso que hago del certificado siempre es por codigo, pero efectivamente, una vez instaldo, va perfecto.

Gracias mil

olinet 16-03-2017 08:16:14

Cita:

Empezado por jlegido (Mensaje 514375)
Hola Keys,

Puedes poner la direccion del enlace donde se puede consultar las facturas presentadas, porque no acabo de encontrarlo en la web de AEAT.
O es que se ha de hacer por codigo. Si asi fuera y tienes una pequeña muestra seria genial

Muchas gracias

Hola, te respondo yo si no te importa que ayer mismo estuve probando esto, creo que te refieres al portal de pruebas:
https://www7.aeat.es/PRE-Exteriores/...formacion.html

Tienes que entrar con el certificado que usaste para subirlas, una vez allí puedes consultar o hacer subidas de XMLs también. Esperamos que en Abril publiquen el formulario para subir facturas a mano de una en una.

¿Es eso lo que buscabas?.

Saludos.
Juan María.

mpino 16-03-2017 08:30:48

Cita:

Empezado por batuzail (Mensaje 514089)
Gracias Keys.
Alguno que lo este haciendo en C#, lo tengo hecho en VB y me funciona, lo quiero pasar a C# y tengo un problema al redimensionar los arrays, en VB con Redim no tenia problemas pero en C# no me es posible redimensionar.



Alguien puede decirme como lo ha hecho?

Saludos

Mira a ver si te funciona esto:

//from Applied Microsoft.NET framework Programming - Jeffrey Richter
public static Array RedimPreserve(Array origArray, Int32 desiredSize)
{
System.Type t = origArray.GetType().GetElementType();
Array newArray = Array.CreateInstance(t, desiredSize);
Array.Copy(origArray, 0, newArray, 0, Math.Min(origArray.Length, desiredSize));
return newArray;
}
Source: https://social.msdn.microsoft.com/Fo...csharplanguage

jonortsal 16-03-2017 08:31:56

Por favor, si alguien tiene implementado cómo consumir el webservice en VB.NET o PHP, por favor que comparta el proyecto. Sobre todo lo que me interesa la parte de conexión del certificado que me genera errores en ambos lenguajes.
Gracias por adelantado.

jonortsal 16-03-2017 08:38:37

Por favor, podrías mandar un zip el proyecto? Es que soy más de PHP que de VB.NET y no sé que clases importar y demás para el certificado. Gracias.

keys 16-03-2017 09:15:38

El enlace es la siguiente.

http://www.agenciatributaria.es/AEAT.internet/SII.html

Tienes que ir a Acceso al portal de pruebas del SII. Tienes que tener el certificado de la empresa a presentar.

Un Saludo.

Francisco1973 16-03-2017 12:51:53

Hola, ¿ alquien ha podido enviar al SuministroOpTrascendTribuPruebas ?.
Obtengo el error: "Unable to retrieve the URL endpoint for Service/Port 'siiService' 'SuministroOpTrascendTribuPruebas' from WSDL"
Saludos

jonortsal 16-03-2017 13:37:53

He utilizado el código VB.NET que comentaba el compañero poniendo el fichero xml en la carpeta y ya no me genera ningún error, pero no recibo respuesta. ¿Existe alguna forma de ver el mensaje SOAP de respuesta?


Dim store As Security.Cryptography.X509Certificates.X509Store = New Security.Cryptography.X509Certificates.X509Store(StoreName.My, StoreLocation.CurrentUser)
store.Open(Security.Cryptography.X509Certificates.OpenFlags.ReadOnly)

Dim CertificadoCorrecto As New System.Security.Cryptography.X509Certificates.X509Certificate2

' search store
' Dim col As New X509Certificate2Collection

'col = store.Certificates.Find(X509FindType.FindByIssuerName, "FNMT", True)




Dim ListCert As String = ""


For Each x In store.Certificates
MsgBox(x.Subject)

Next
Respuesta2RichTextBox.Text = ListCert

CertificadoCorrecto = store.Certificates(0) '(5)

' Objeto que almacenara la respuesta de la funcion del Web Service
Dim resp As New ServiceReference1.RespuestaLRFEmitidasType

' Ws
Dim Ws As New ServiceReference1.siiSOAPClient

Ws.ClientCredentials.ClientCertificate.Certificate = CertificadoCorrecto
Ws.ClientCredentials.UseIdentityConfiguration = True

' Asignamos el certificado:
Ws.ClientCredentials.ClientCertificate.Certificate = CertificadoCorrecto
' ----------------------------------------------------------------------------------------


' ----------------------------------------------------------------------------------------
Dim _SuministroLRFacturasEmitidas As New SuministroLRFacturasEmitidas
'--------------------------------------------------------------------------

Try

Dim x As New XmlSerializer(_SuministroLRFacturasEmitidas.GetType, "https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroLR.xsd")

' A FileStream is needed to read the XML document.
Dim filename As String = "facturaEmitidaMODEL.XML"


Using reader As New FileStream(filename, FileMode.Open)
_SuministroLRFacturasEmitidas = CType(x.Deserialize(reader), SuministroLRFacturasEmitidas)
End Using

' SI QUEREMOS SOBREESCRIBIR EL XML ANTES DE ENVIAR:
' SOBREESCRIBIMOS DATS FORM ANTES SEND:
_SuministroLRFacturasEmitidas.Cabecera.Titular.NombreRazon = Trim(TextBoxRazonSocialEmisor.Text)
_SuministroLRFacturasEmitidas.Cabecera.Titular.NIF = Trim(TextBoxNIFEmisor.Text)

'(...)

'// se hace la llamada a la funcion suministrada por el WS
resp = Ws.SuministroLRFacturasEmitidas(_SuministroLRFacturasEmitidas)



Catch ex As Exception
MsgBox(ex.Message)
' Respuesta2RichTextBox = ex.Message
Finally
'Me.Cursor = Cursors.Default
'Threading.Thread.Sleep(5000)
'ProgressBar1.Style = ProgressBarStyle.Continuous
''ProgressBar1.Value = ProgressBar1.Maximum
End Try

mpino 16-03-2017 15:16:12

Cita:

Empezado por jonortsal (Mensaje 514397)
He utilizado el código VB.NET que comentaba el compañero poniendo el fichero xml en la carpeta y ya no me genera ningún error, pero no recibo respuesta. ¿Existe alguna forma de ver el mensaje SOAP de respuesta?


Dim store As Security.Cryptography.X509Certificates.X509Store = New Security.Cryptography.X509Certificates.X509Store(StoreName.My, StoreLocation.CurrentUser)
store.Open(Security.Cryptography.X509Certificates.OpenFlags.ReadOnly)

Dim CertificadoCorrecto As New System.Security.Cryptography.X509Certificates.X509Certificate2

' search store
' Dim col As New X509Certificate2Collection

'col = store.Certificates.Find(X509FindType.FindByIssuerName, "FNMT", True)




Dim ListCert As String = ""


For Each x In store.Certificates
MsgBox(x.Subject)

Next
Respuesta2RichTextBox.Text = ListCert

CertificadoCorrecto = store.Certificates(0) '(5)

' Objeto que almacenara la respuesta de la funcion del Web Service
Dim resp As New ServiceReference1.RespuestaLRFEmitidasType

' Ws
Dim Ws As New ServiceReference1.siiSOAPClient

Ws.ClientCredentials.ClientCertificate.Certificate = CertificadoCorrecto
Ws.ClientCredentials.UseIdentityConfiguration = True

' Asignamos el certificado:
Ws.ClientCredentials.ClientCertificate.Certificate = CertificadoCorrecto
' ----------------------------------------------------------------------------------------


' ----------------------------------------------------------------------------------------
Dim _SuministroLRFacturasEmitidas As New SuministroLRFacturasEmitidas
'--------------------------------------------------------------------------

Try

Dim x As New XmlSerializer(_SuministroLRFacturasEmitidas.GetType, "https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroLR.xsd")

' A FileStream is needed to read the XML document.
Dim filename As String = "facturaEmitidaMODEL.XML"


Using reader As New FileStream(filename, FileMode.Open)
_SuministroLRFacturasEmitidas = CType(x.Deserialize(reader), SuministroLRFacturasEmitidas)
End Using

' SI QUEREMOS SOBREESCRIBIR EL XML ANTES DE ENVIAR:
' SOBREESCRIBIMOS DATS FORM ANTES SEND:
_SuministroLRFacturasEmitidas.Cabecera.Titular.NombreRazon = Trim(TextBoxRazonSocialEmisor.Text)
_SuministroLRFacturasEmitidas.Cabecera.Titular.NIF = Trim(TextBoxNIFEmisor.Text)

'(...)

'// se hace la llamada a la funcion suministrada por el WS
resp = Ws.SuministroLRFacturasEmitidas(_SuministroLRFacturasEmitidas)



Catch ex As Exception
MsgBox(ex.Message)
' Respuesta2RichTextBox = ex.Message
Finally
'Me.Cursor = Cursors.Default
'Threading.Thread.Sleep(5000)
'ProgressBar1.Style = ProgressBarStyle.Continuous
''ProgressBar1.Value = ProgressBar1.Maximum
End Try

Con este mismo código yo sí recibo respuesta, pero siempre me dice "AEAT_errores_tecnicos". ¿Alguna pista?

Muchas gracias
mpino

jonortsal 16-03-2017 15:33:54

A mi sí me añade la factura emitida, porque luego lo veo con el soapUI, pero me gustaría capturar la respuesta del WebService y no sé como hacerlo.
Gracias.

Carlos Garcia C 16-03-2017 16:52:10

No consigo que mis XML pasen correctamente
 
Buenos días:
Llevo dos semanas con este tema y no consigo nada.. como dije yo soy contable y de INFORMATICO desafortunadamente nada, pero tengo mucha voluntad de saber, por ejemplo, así he revisado las 17 paginas del foro por ejemplo no sé ni siquiera qué significa deserializando. Perdonad mi ignorancia.
¿Alguno de vosotros me puede echar una mano o mandarme un fichero a modo de prueba que haya pasado y no me de este tipo de mensajes u otros que no me dejen avanzar para hacer consultas posteriores, etc, también en modo de prueba?.
Yo hago lo siguiente:
Paso 1- Genero un .DOC y lo Guardo como WEB para XML, en total como 3 hojas y media (que adjunto)
Paso 2- Entro en AEAT, clicleo EXAMINAR. y a continuación incluye como Peticion a la izquierda de la pantalla un fichero donde ya aparecen como 10 hojas más y en las primeras líneas aparece <meta http-equiv=Content-Type ... que tu me dices debería ser así <meta http-equiv="Content-Type".
Yo no puedo corregir eso, no me deja, ni tampoco se como cambiar o que cambiar en el DOC del Paso 1, porque he copiado literalmente un ejemplo que incluye en la documentación la propia AEAT, con un copy/pega.
Pasos 5 y 4-Como consecuencia de ello, al cliclear ENVIAR, la AEAT me rellena la parte derecha de la pantalla, y me da los consabidos mensajes, de lo de las comas.

No puedo dejar este tema sin resolverlo, PERO LO QUE NO ENTIENDO ES EL PORQUE DE UN XML DE 3,5 HOJAS (El DOC que convierto en XML), LA AEAT LO CONVIERTE EN ALGO MUY DISTINTO y las 3,5 hojas las convierte en más de 10 hojas, cuando la da como recibida la AEAT.. Y POR ESO PENSE QUE ERA EL CONVERSOR QUE UTILIZA MI PC DEL WORD--> GUARDAR COMO WEB.
Probablemente esto es muy básico para un INFORMATICO, pero para mi nada de nada.

Muchas GRACIAS por todo..

Carlos Garcia C 16-03-2017 17:54:23

No consigo que mis XML pasen correctamente (continua los Anexos)
 
.... corrijo... he contado las páginas, que van de 3,5 a 57,
.... no se porque no se han adjuntado los anexos con mi texto anterior..puede ser por el tamaño ... u otro tema ???

Gracias anticipadas colaboración.

Nasca 16-03-2017 18:06:09

Cita:

Empezado por Carlos Garcia C (Mensaje 514402)
No puedo dejar este tema sin resolverlo, PERO LO QUE NO ENTIENDO ES EL PORQUE DE UN XML DE 3,5 HOJAS (El DOC que convierto en XML), LA AEAT LO CONVIERTE EN ALGO MUY DISTINTO y las 3,5 hojas las convierte en más de 10 hojas, cuando la da como recibida la AEAT.. Y POR ESO PENSE QUE ERA EL CONVERSOR QUE UTILIZA MI PC DEL WORD--> GUARDAR COMO WEB.
Probablemente esto es muy básico para un INFORMATICO, pero para mi nada de nada.

Me temo que no van por ahí los tiros.
Es algo mas complejo de hacer. Y si quieres hacerlo a mano olvídate de word y usa notepad u otro editor de texto sencillo.

jlegido 16-03-2017 19:25:46

1 Archivos Adjunto(s)
Hola,

En primir lugar agradecer a toda la gente del foro su ayuda e ideas. El foro es de Delphi, pero nos hemos metido los de .NET, por que no hay nada igual en este tema.

No he podido antes, pero si quiero sobre todo quiero agradecer la ayuda especial de CMB, bartag, batuzail, angelhorse y vicdeju por ideas o aportes que me han ayudado a saltar unas cuantas vallas/tapias informaticas que de otra forma no habria podido.

Esto ya funciona en lo esencial. Ahora estoy con el tema de las facturas Recibidas (el punto 6.2.2.1. Alta/Modificacion de facturas del SII_Descripcion_ServicioWeb_v0.5.pdf), para el cual no hay ningun ejemplo en xml.

Ya he construido uno, que subo, pero me da error, del cual pongo la parte principal

Código:

env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Body>
<env:Fault>
<faultcode>env:Client</faultcode>
<faultstring>
Codigo[4124].Error La direccion no se corresponde con el fichero de entrada.
</faultstring>
<detail>
<callstack>
Error La direccion no se corresponde con el fichero de entrada. WSExcepcion [faultcode=null, detailMap=null, version=0, faultstring=null, faultactor=null, faultSubCode=null, reasonText=null, detail=null, nameSpaceUriDetail=null] at

Subo el xml contruido y el del error.

A alguien le ha aparecido un error similar y sabe a que puede deberse o en su defecto tiene un ejemplo de xml para facturas recibidas valido

Gracias !!!! :):):D

dmg 16-03-2017 19:39:13

Muy buenas, yo también lo estoy haciendo en c#, estoy siguiendo las clases de BATUZAIL.
Tengo un problema en el XML generado, me agrega el xmlns en muchas etiquetas y no se como quitarlo.

<PeriodoImpositivo xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroInformacion.xsd">

El fichero lo genero:

//GENERAR FICHERO XML
string fichero = path + "\\" + nuevoNombre;
XmlSerializer serializer = new XmlSerializer(typeof(SuministroLRFacturasEmitidas));
FileStream fs = new FileStream(fichero, FileMode.Create);
try
{
serializer.Serialize(fs, SII_Emitidas);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
throw;
}
fs.Close();

Donde SII_Emitidas es:

SuministroLRFacturasEmitidas SII_Emitidas = new SuministroLRFacturasEmitidas();

Gracias.

CMB 16-03-2017 20:37:38

Cita:

Empezado por jlegido (Mensaje 514408)
Hola,
En primir lugar agradecer a toda la gente del foro su ayuda e ideas. El foro es de Delphi, pero nos hemos metido los de .NET, por que no hay nada igual en este tema.
No he podido antes, pero si quiero sobre todo quiero agradecer la ayuda especial de CMB, bartag, batuzail, angelhorse y vicdeju por ideas o aportes que me han ayudado a saltar unas cuantas vallas/tapias informaticas que de otra forma no habria podido.
Esto ya funciona en lo esencial. Ahora estoy con el tema de las facturas Recibidas (el punto 6.2.2.1. Alta/Modificacion de facturas del SII_Descripcion_ServicioWeb_v0.5.pdf), para el cual no hay ningun ejemplo en xml.
Ya he construido uno, que subo, pero me da error, del cual pongo la parte principal

Código:

env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Body>
<env:Fault>
<faultcode>env:Client</faultcode>
<faultstring>
Codigo[4124].Error La direccion no se corresponde con el fichero de entrada.
</faultstring>
<detail>
<callstack>
Error La direccion no se corresponde con el fichero de entrada. WSExcepcion [faultcode=null, detailMap=null, version=0, faultstring=null, faultactor=null, faultSubCode=null, reasonText=null, detail=null, nameSpaceUriDetail=null] at

Subo el xml contruido y el del error.
A alguien le ha aparecido un error similar y sabe a que puede deberse o en su defecto tiene un ejemplo de xml para facturas recibidas valido
Gracias !!!! :):):D

Sospecho que has enviado facturas recibidas a la dirección de las emitidas. Piensa que la URL del webservice es distinta.

CMB 16-03-2017 20:40:37

Cita:

Empezado por CMB (Mensaje 514412)
Sospecho que has enviado facturas recibidas a la dirección de las emitidas. Piensa que la URL del webservice es distinta.

Las recibidas han de ir a https://www7.aeat.es/wlpl/SSII-FACT/...iiFactFRV1SOAP, sino te sale el mensaje ese de "La direccion no se corresponde con el fichero de entrada."

keys 17-03-2017 08:25:08

Cita:

Empezado por Carlos Garcia C (Mensaje 514402)
Buenos días:
Llevo dos semanas con este tema y no consigo nada.. como dije yo soy contable y de INFORMATICO desafortunadamente nada, pero tengo mucha voluntad de saber, por ejemplo, así he revisado las 17 paginas del foro por ejemplo no sé ni siquiera qué significa deserializando. Perdonad mi ignorancia.
¿Alguno de vosotros me puede echar una mano o mandarme un fichero a modo de prueba que haya pasado y no me de este tipo de mensajes u otros que no me dejen avanzar para hacer consultas posteriores, etc, también en modo de prueba?.
Yo hago lo siguiente:
Paso 1- Genero un .DOC y lo Guardo como WEB para XML, en total como 3 hojas y media (que adjunto)
Paso 2- Entro en AEAT, clicleo EXAMINAR. y a continuación incluye como Peticion a la izquierda de la pantalla un fichero donde ya aparecen como 10 hojas más y en las primeras líneas aparece <meta http-equiv=Content-Type ... que tu me dices debería ser así <meta http-equiv="Content-Type".
Yo no puedo corregir eso, no me deja, ni tampoco se como cambiar o que cambiar en el DOC del Paso 1, porque he copiado literalmente un ejemplo que incluye en la documentación la propia AEAT, con un copy/pega.
Pasos 5 y 4-Como consecuencia de ello, al cliclear ENVIAR, la AEAT me rellena la parte derecha de la pantalla, y me da los consabidos mensajes, de lo de las comas.

No puedo dejar este tema sin resolverlo, PERO LO QUE NO ENTIENDO ES EL PORQUE DE UN XML DE 3,5 HOJAS (El DOC que convierto en XML), LA AEAT LO CONVIERTE EN ALGO MUY DISTINTO y las 3,5 hojas las convierte en más de 10 hojas, cuando la da como recibida la AEAT.. Y POR ESO PENSE QUE ERA EL CONVERSOR QUE UTILIZA MI PC DEL WORD--> GUARDAR COMO WEB.

Probablemente esto es muy básico para un INFORMATICO, pero para mi nada de nada.

Muchas GRACIAS por todo..

Hola Carlos Garcia . Creo que vas un poco desencaminado. Este un problema que se debe tratar desde un punto de vista informático. Ya que intentar generar los ficheros a mano ya sea con el word, bloc de notas, puede ser una locura, y de eso es lo que se intenta abordar en este foro. Si como dices informatico nada, me imagino que todo lo que has leido en el foro te sonará a chino.

En unos ¿dias?. La Aeat va sacar una manera de presentar las facturas a mano una a una, no se va a poder importar ficheros. Igual es esto lo que necesitas.

Cambiando de tema. La Aeat ha puesto un enlace https://www7.aeat.es/PRE-Exteriores/...formacion.htmlen "Acceso al portal de pruebas del SII-->Presentacion--> Cliente de web service para el entorno de pruebas", se accede a un formulario que simula el comportamiento de un WebService para la presentación de Información del SII. Es decir es como Wizdler.

Un Saludo.

angelhorse 17-03-2017 09:33:35

Buenas a todos.
Últimamente me sale este error:
"Ha surgido un problema: System.Net.WebException: Anulada la solicitud: No se puede crear un canal seguro SSL/TLS."

He intentando con un par de soluciones que ponen por internet como por estas 2 líneas:

private static Boolean ValidarCertificado(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certificate, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors)
{
return true;
}

System.Net.ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(ValidarCertificado);
CredentialCache cache = new CredentialCache();


¿Os ha pasado a alguno?
Yo me estoy volviendo loco.

p.d. El certificado está en regla, de hecho es el que utilizo para acceder a Hacienda con credenciales.

robinsondemantu 17-03-2017 09:44:07

Pon el código que utilizas para hacer la llamada y lo vemos. ¿Te funcionaba antes?

robinsondemantu 17-03-2017 09:47:59

Versión 0.6
 
Buenos días:

Ayer cambié a la versión 0.6 tras estar funcionando correctamente la anterior, y ahora ha empezado a darme este error.

El tipo de contenido text/xml;charset=ISO-8859-1 del mensaje de respuesta no coincide con el tipo de contenido del enlace (text/xml; charset=utf-8). Si usa un codificador personalizado, asegúrese de que el método IsContentTypeSupported se implemente correctamente. Los primeros 767 bytes de la respuesta fueron: '<?xml version="1.0" encoding="UTF-8"?><env:Envelope xmlns:env="xxxxxxx"><env:Body><env:Fault><faultcode>env:Server</faultcode><faultstring>Codigo[103].nif no identificado: 05404528B</faultstring><detail><callstack>nif no identificado: XXXXXXXXX
es.aeat.adht.jdit.api.infra.InfraestructuraExcepcion: nif no identificado: XXXXXXXXX
at es.aeat.adht.jdit.imp.iden.IdentificaSrvImpl.validarCertificado(IdentificaSrvImpl.java:545)
at es.aeat.adht.jdit.imp.iden.IdentificaSrvImpl.cargaSSL(IdentificaSrvImpl.java:133)
at es.aeat.adht.jdit.imp.iden.IdentificaSrvImpl.identificaCertificado(IdentificaSrvImpl.java:284)
at es.aeat.adht.jdit.imp.iden.IdenWLPSrvImpl.cargarCertificado(IdenWLPSrvImpl.java:44)
at es.aeat.adht.jdit.imp.infra.In'.

Le ha ocurrido a alguien más?

Gracias.

angelhorse 17-03-2017 09:56:32

Cita:

Empezado por robinsondemantu (Mensaje 514423)
Pon el código que utilizas para hacer la llamada y lo vemos. ¿Te funcionaba antes?


/*
X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly);
X509Certificate2Collection certCollection = store.Certificates.Find(X509FindType.FindBySubjectName, "tecnologica", false);
foreach (var item in certCollection)
{
Debug.Print("Item: " + item.SubjectName.Name);
}
X509Certificate2 cert = certCollection[0];
*/

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(connectionString_HACIENDA);
request.ContentType = "text/xml";
request.Method = "POST";

request.Credentials = CredentialCache.DefaultCredentials;
if (CERTIFICADO != null)
{
request.ClientCertificates.Add(CERTIFICADO);
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(root.ToString());

request.ContentLength = bytes.Length;
Stream requestStream = request.GetRequestStream();
requestStream.Write(bytes, 0, bytes.Length);
requestStream.Close();


using (HttpWebResponse webResponse = (HttpWebResponse)request.GetResponse())
{
using (Stream responseStream = webResponse.GetResponseStream())
{
using (StreamReader responseStreamReader = new StreamReader(responseStream, true))
{
response = responseStreamReader.ReadToEnd();
responseStreamReader.Close();
}
responseStream.Close();
}
webResponse.Close();
}


Debug.Print("Respuesta: " + response);

}

Antes si me funcionaba. Antes cogía el certificado a "pelo" que es el código que está comentado al principio.
Después lo cambié por algo más visual para que el usuario escogiese el certificado, pero el funcionamiento es idéntico.

robinsondemantu 17-03-2017 10:39:14

Y te da el mismo error si descomentas lo de arriba y lo hacías como antes?

robinsondemantu 17-03-2017 10:52:02

Pon esto en tu código a ver si funciona:

ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

Si no tienes .NETFramework 4.5, el equivalente es este

ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;

No puedo pegarte el enlace de stackoverflow :(

robinsondemantu 17-03-2017 10:58:24

Versión 0.6
Buenos días:

Ayer cambié a la versión 0.6 tras estar funcionando correctamente la anterior, y ahora ha empezado a darme este error.

El tipo de contenido text/xml;charset=ISO-8859-1 del mensaje de respuesta no coincide con el tipo de contenido del enlace (text/xml; charset=utf-8). Si usa un codificador personalizado, asegúrese de que el método IsContentTypeSupported se implemente correctamente. Los primeros 767 bytes de la respuesta fueron: '<?xml version="1.0" encoding="UTF-8"?><env:Envelope xmlns:env="xxxxxxx"><env:Body><env:Fault><faultcode>env:Server</faultcode><faultstring>Codigo[103].nif no identificado: 05404528B</faultstring><detail><callstack>nif no identificado: XXXXXXXXX
es.aeat.adht.jdit.api.infra.InfraestructuraExcepcion: nif no identificado: XXXXXXXXX
at es.aeat.adht.jdit.imp.iden.IdentificaSrvImpl.validarCertificado(IdentificaSrvImpl.java:545)
at es.aeat.adht.jdit.imp.iden.IdentificaSrvImpl.cargaSSL(IdentificaSrvImpl.java:133)
at es.aeat.adht.jdit.imp.iden.IdentificaSrvImpl.identificaCertificado(IdentificaSrvImpl.java:284)
at es.aeat.adht.jdit.imp.iden.IdenWLPSrvImpl.cargarCertificado(IdenWLPSrvImpl.java:44)
at es.aeat.adht.jdit.imp.infra.In'.

Le ha ocurrido a alguien más?

Gracias.

--------------------
Nada, ya da igual. Me ha funcionado otra vez sin tocar nada. Ha debido ser algo de ellos.

luisgb 17-03-2017 10:58:55

Hola. Yo lo intenté hacer con Delphi 7 primero, pero tuve muchos problemas con los WDSL. Incluso importándolos con XE no pude utilizarlos en Delphi 7 por que seguía dando problemas al serializar. Todo lo demás funcionaba bien, SOAP, certificado, etc., pero no conseguí que serializara bien, así que me tuve que pasar a XE2.

jonortsal 17-03-2017 11:08:17

¿Sabeís como puedo modificar este código que en principio me funciona para las facturas emitidas?
Quiero dos cosas:
1. Capturar el SOAP Request que envío y el Soap Response que recibo
2. Poder seleccionar un certificado de los disponibles. Ya que somos un grupo de empresas.

He utilizado el código VB.NET que comentaba el compañero poniendo el fichero xml en la carpeta y ya no me genera ningún error, pero no recibo respuesta. ¿Existe alguna forma de ver el mensaje SOAP de respuesta?


Dim store As Security.Cryptography.X509Certificates.X509Store = New Security.Cryptography.X509Certificates.X509Store(StoreName.My, StoreLocation.CurrentUser)
store.Open(Security.Cryptography.X509Certificates.OpenFlags.ReadOnly)

Dim CertificadoCorrecto As New System.Security.Cryptography.X509Certificates.X509Certificate2

' search store
' Dim col As New X509Certificate2Collection

'col = store.Certificates.Find(X509FindType.FindByIssuerName, "FNMT", True)




Dim ListCert As String = ""


For Each x In store.Certificates
MsgBox(x.Subject)

Next
Respuesta2RichTextBox.Text = ListCert

CertificadoCorrecto = store.Certificates(0) '(5)

' Objeto que almacenara la respuesta de la funcion del Web Service
Dim resp As New ServiceReference1.RespuestaLRFEmitidasType

' Ws
Dim Ws As New ServiceReference1.siiSOAPClient

Ws.ClientCredentials.ClientCertificate.Certificate = CertificadoCorrecto
Ws.ClientCredentials.UseIdentityConfiguration = True

' Asignamos el certificado:
Ws.ClientCredentials.ClientCertificate.Certificate = CertificadoCorrecto
' ----------------------------------------------------------------------------------------


' ----------------------------------------------------------------------------------------
Dim _SuministroLRFacturasEmitidas As New SuministroLRFacturasEmitidas
'--------------------------------------------------------------------------

Try

Dim x As New XmlSerializer(_SuministroLRFacturasEmitidas.GetType, "https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroLR.xsd")

' A FileStream is needed to read the XML document.
Dim filename As String = "facturaEmitidaMODEL.XML"


Using reader As New FileStream(filename, FileMode.Open)
_SuministroLRFacturasEmitidas = CType(x.Deserialize(reader), SuministroLRFacturasEmitidas)
End Using

' SI QUEREMOS SOBREESCRIBIR EL XML ANTES DE ENVIAR:
' SOBREESCRIBIMOS DATS FORM ANTES SEND:
_SuministroLRFacturasEmitidas.Cabecera.Titular.NombreRazon = Trim(TextBoxRazonSocialEmisor.Text)
_SuministroLRFacturasEmitidas.Cabecera.Titular.NIF = Trim(TextBoxNIFEmisor.Text)

'(...)

'// se hace la llamada a la funcion suministrada por el WS
resp = Ws.SuministroLRFacturasEmitidas(_SuministroLRFacturasEmitidas)



Catch ex As Exception
MsgBox(ex.Message)
' Respuesta2RichTextBox = ex.Message
Finally
'Me.Cursor = Cursors.Default
'Threading.Thread.Sleep(5000)
'ProgressBar1.Style = ProgressBarStyle.Continuous
''ProgressBar1.Value = ProgressBar1.Maximum
End Try

jlegido 17-03-2017 11:20:14

Si, gracias.
Ya me lo respondio casi inmediatamente Nasca, pero tu enlace es mas claro y le servirá a mas gente

CMB 17-03-2017 11:21:41

Factura simplificada, ¿qué NIF y qué nombre fiscal?
 
He buscado por todo el hilo y creo que este tema no se ha tratado todavía.

Con las facturas simplificadas ya sabemos que el tag TipoFactura tiene que ser F2. Pero cuando se emiten tiques, en la gran mayoría de los casos el vendedor no tiene constancia del NIF ni del nombre fiscal del cliente. Por ejemplo, en una ferretería o en una frutería.

Entonces, al enviar una petición al webservice que contiene ese tipo de facturas, ¿que hay que poner en los tags NombreRazon y NIF? ¿Se pueden dejar en blanco? No he sabido encontrar la respuesta en el documento SII_Descripcion_ServicioWeb_v0.6.pdf, si es que la hay.

¿Alguien tiene idea de ello?

Saludos,

Nasca 17-03-2017 11:31:31

Cita:

Empezado por CMB (Mensaje 514438)
He buscado por todo el hilo y creo que este tema no se ha tratado todavía.
Con las facturas simplificadas ya sabemos que el tag TipoFactura tiene que ser F2. Pero cuando se emiten tiques, en la gran mayoría de los casos el vendedor no tiene constancia del NIF ni del nombre fiscal del cliente. Por ejemplo, en una ferretería o en una frutería.
Entonces, al enviar una petición al webservice que contiene ese tipo de facturas, ¿que hay que poner en los tags NombreRazon y NIF? ¿Se pueden dejar en blanco? No he sabido encontrar la respuesta en el documento SII_Descripcion_ServicioWeb_v0.6.pdf, si es que la hay.
Saludos,

Directamente no envíes la sección Contraparte. Es decir no envíes nada.

Sin embargo, si envías contenido se valida y es aceptado.

Si lo envías en blanco sale un bonito= "Valor o tipo incorrecto del campo: NombreRazon"

Conclusión, no envíes Contraparte y no des mas información de la estrictamente necesaria.

CMB 17-03-2017 11:32:04

Cita:

Empezado por CMB (Mensaje 514438)
He buscado por todo el hilo y creo que este tema no se ha tratado todavía.
Con las facturas simplificadas ya sabemos que el tag TipoFactura tiene que ser F2. Pero cuando se emiten tiques, en la gran mayoría de los casos el vendedor no tiene constancia del NIF ni del nombre fiscal del cliente. Por ejemplo, en una ferretería o en una frutería.
Entonces, al enviar una petición al webservice que contiene ese tipo de facturas, ¿que hay que poner en los tags NombreRazon y NIF? ¿Se pueden dejar en blanco? No he sabido encontrar la respuesta en el documento SII_Descripcion_ServicioWeb_v0.6.pdf, si es que la hay.
¿Alguien tiene idea de ello?
Saludos,

Ya veo en el ejemplo de SII_Descripcion_ServicioWeb_v0.6.pdf que esos dos tags no se incluyen, quizás no son obligatorios en ese caso. Tiene su lógica. Ya veremos si al enviar el XML genera algún error.

CMB 17-03-2017 11:34:22

Cita:

Empezado por Nasca (Mensaje 514439)
Directamente no envíes la sección Contraparte. Es decir no envíes nada.
Sin embargo, si envías contenido se valida y es aceptado.
Si lo envías en blanco sale un bonito= "Valor o tipo incorrecto del campo: NombreRazon"
Conclusión, no envíes Contraparte y no des mas información de la estrictamente necesaria.

Tienes razón, el ejemplo carece del tag Contraparte.

Aclarado. Muchas gracias, Nasca.

CMB 17-03-2017 15:19:01

Cómo rellenar <DescripcionOperacion>
 
Aunque en unos pocos casos hay requerimientos especiales, de modo general, ¿se puede introducir en <DescripcionOperacion> una descripción genérica, siempre la misma, como SUMINISTRO DE BIENES O SERVICIOS, o hay que obligar al usuario a que, en cada factura emitida y recibida, escriba la descripción adecuada, con la pérdida de tiempo que ello conlleva?

Algunas empresas siempre venden lo mismo, pero otras tienen una gran variación, y mezclan género físico con horas de trabajo y otros servicios. En los ejemplos de la AEAT ponen diversas frases, como Objeto FACTURA, CompraXXXXXXX, VentaXXXXXXX, CASO PRUEBA, etc.

¿Cómo lo habéis resuelto vosotros?

Muchas gracias.

Saludos,

newtron 17-03-2017 17:11:11

Cita:

Empezado por CMB (Mensaje 514444)
Aunque en unos pocos casos hay requerimientos especiales, de modo general, ¿se puede introducir en <DescripcionOperacion> una descripción genérica, siempre la misma, como SUMINISTRO DE BIENES O SERVICIOS, o hay que obligar al usuario a que, en cada factura emitida y recibida, escriba la descripción adecuada, con la pérdida de tiempo que ello conlleva?

Algunas empresas siempre venden lo mismo, pero otras tienen una gran variación, y mezclan género físico con horas de trabajo y otros servicios. En los ejemplos de la AEAT ponen diversas frases, como Objeto FACTURA, CompraXXXXXXX, VentaXXXXXXX, CASO PRUEBA, etc.

¿Cómo lo habéis resuelto vosotros?

Muchas gracias.

Saludos,

Me puedo equivocar pero yo dudo que la aeat obligue a poner una descripción específica para cada factura, eso sería una locura. Yo en particular no pienso hacer nada al respecto por el momento, pondré una descripción genérica y a volar. De todas formas, tanto este como otros temas habrá que ir resolviéndolos sobre la marcha.

Saludos

CMB 17-03-2017 17:18:04

Cita:

Empezado por newtron (Mensaje 514446)
Me puedo equivocar pero yo dudo que la aeat obligue a poner una descripción específica para cada factura, eso sería una locura. Yo en particular no pienso hacer nada al respecto por el momento, pondré una descripción genérica y a volar. De todas formas, tanto este como otros temas habrá que ir resolviéndolos sobre la marcha.
Saludos

Eso haré yo también. Si más adelante hay cambios, nos tendremos que adaptar.

Muchas gracias,

Nasca 17-03-2017 17:26:56

Seguramente la pongan luego como un cajón desastre para justificaciones específicas de cara a una inspección de registros personal por algún funcionario.

Yo por lo pronto la usaré para meter claves externas de registros y explicar volúmenes importantes de facturas simplificadas agrupadas. Para que si alguien revisa esos movimientos, que siempre son delicados, encuentre su justificación directamente en el propio registro.

dmg 17-03-2017 18:29:18

Generar el xml en .Net
 
1 Archivos Adjunto(s)
Muy buenas, estoy realizando el proyecto en c# con Visual Studio 2010 .Net 4.6, el fichero XML que genero no lo valida correctamente.
Faltan los nodos Envelope, Header, Body,...


Como puedo conseguir generar la estructura como la de los ejemplos o algo parecido que se valide correctamente?


Yo estoy haciendo lo siguiente:

1) Creo un proyecto windows form

2) Agrego una Referencia de Servicio y en la direccion incluyo el wsdl y pulso IR:
"https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroFactEmitidas.wsdl"
3) Cambio el nombre del NAMESPACE: ServiceReferenceEmitidas

4) incluyo en el proyecto
using PruebaWS.ServiceReferenceEmitidas;

5) Defino una variable del tipo SuministroLRFacturasEmitidas y voy rellenando los datos de la factura

SuministroLRFacturasEmitidas SII_Emitidas = new SuministroLRFacturasEmitidas();

6) Termino generando el XML.
XmlSerializer serializer = new XmlSerializer(typeof(SuministroLRFacturasEmitidas));
FileStream fs = new FileStream(fichero, FileMode.Create);
serializer.Serialize(fs, SII_Emitidas);


Espero que alguien me pueda echar una mano, muchas gracias
Un saludo.


La franja horaria es GMT +2. Ahora son las 19:35:59.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi