Cita:
Empezado por richidemola
Puedes compartir el proceso de envío? Vamos, que como lo has enviado, si con algún lenguaje de programación, curl, llamada soap, es que no consigo enviar una mierda, he usado la url que pones y nada, he firmado el xml primero con autofirma y nada de nada.
Si tienes algo de código fuente de como lo envías y lo compartes pues te estaríamos eternamente agradecidos.
Gracias.
|
Buenas, en vb net lo hago asi:
Public Function validarCertificado(ByVal sender As Object, ByVal certificado As System.Security.Cryptography.X509Certificates.X509Certificate, ByVal cadena As System.Security.Cryptography.X509Certificates.X509Chain, ByVal sslErrores As System.Net.Security.SslPolicyErrors) As Boolean
Return True
End Function
Por cierto... no es necesario que firmes el xmk. Tan solo firmar la peticion con tu certificado pfx
un saludo
Public Function SendSOAPRequest(ByVal soapRequest As String, ByVal url As String, ByVal certificatePath As String, ByVal certificatePassword As String) As String
Dim soapResponse As String = Nothing
Try
System.Net.ServicePointManager.SecurityProtocol = DirectCast(3072, System.Net.SecurityProtocolType)
System.Net.ServicePointManager.ServerCertificateValidationCallback = New System.Net.Security.RemoteCertificateValidationCallback(AddressOf validarCertificado)
' solicitud = DirectCast(System.Net.HttpWebRequest.Create(target), System.Net.HttpWebRequest)
' solicitud.Timeout = 2500
' Crear la solicitud web
Dim webRequest As HttpWebRequest = DirectCast(System.Net.HttpWebRequest.Create(url), System.Net.HttpWebRequest)
webRequest.Timeout = 2500
' webRequest.Headers.Add("SOAPAction", "AltaFactuSistemaFacturacion")
webRequest.ContentType = "text/xml;charset=""utf-8"""
webRequest.Accept = "text/xml"
webRequest.Method = "POST"
' Configurar el certificado
Dim certificate As X509Certificate2 = New X509Certificate2(certificatePath, certificatePassword)
webRequest.ClientCertificates.Add(certificate)
' Escribir la solicitud SOAP en el flujo de la solicitud web
Using streamWriter As StreamWriter = New StreamWriter(webRequest.GetRequestStream())
streamWriter.Write(soapRequest)
streamWriter.Flush()
streamWriter.Close()
End Using
' Obtener la respuesta
Using webResponse As WebResponse = webRequest.GetResponse()
Using streamReader As StreamReader = New StreamReader(webResponse.GetResponseStream())
soapResponse = streamReader.ReadToEnd()
End Using
End Using
Catch ex As Exception
' Manejar errores
MsgBox("Error en la solicitud SOAP: " & ex.Message)
Return "Error en la solicitud SOAP: " & ex.Message
End Try
Return soapResponse
End Function
' el siguiente botón hace la petición al servicio
Private Sub peticion_Click(sender As System.Object, e As System.EventArgs) Handles peticion.Click
Dim client As New SOAPClient()
' Ruta al archivo de certificado y contraseña del certificado
Dim certificatePath As String = "D:\documentos\certificado.pfx"
Dim certificatePassword As String = "xxxxxxxxxx"
' URL del servicio web SOAP
Dim url As String = "https://prewww1.aeat.es/wlpl/TIKE-CONT/ws/SistemaFacturacion/VerifactuSOAP"
' en textbox1 meto el xml que previamente he generado
Dim soapRequest As String = TextBox1.Text
' Enviar la solicitud SOAP
Dim soapResponse As String = client.SendSOAPRequest(soapRequest, url, certificatePath, certificatePassword)
' en respuesta.xml meto la respuesta
My.Computer.FileSystem.WriteAllText("respuesta.xml", soapResponse, False)
' Manejar la respuesta SOAP
End Sub
No hace falta firmar el xml, tan solo la peticion con tu certificado pfx