New question

Question:

Date: 29-02-2020 08:07:48 (In Spanish)

Conectar con el SOAP de Fomento (España) para notificar servicio VTC.[Unresolved]

Buenos días amigos, al final, antes de tirar la toalla o de volverme definitivamente loca recurro a vosotros para ver si algún alma caritativa me puede echar un cable.
Antes de que se me pase trato de hacer la conexión desde PHP y decir que llevo googleando y probando desde hace un par de meses y no consigo sacar nada en claro, hay alguna pregunta parecida a esta pero sin respuesta, traté con varias rutinas pero sin éxito.
El tema en cuestión es comunicar a al Ministerio de Fomento de España los traslados (viajes) que está previsto realizar en los próximos días por medio de un procedimiento SOAP.
Las direcciones de acceso al servicio web en los entornos de Integración y Producción son:
Entorno de Integración
https://presede.fomento.gob.es/MFOM.Services.VTC.Server/VTCPort?wsdl
Puerto de conexión: 443
Entorno de Producción
https://sede.fomento.gob.es/MFOM.Services.VTC.Server/VTCPort?wsdl
Puerto de conexión: 443
Para poder operar con ellos hay que enviarles un correo a la dirección registrovtc@fomento.es, indicando en el asunto “ALTA REGISTRO VTC” con la siguiente información:
- NIF de la entidad (persona jurídica) que va a realizar las comunicaciones
- Razón social de la entidad que va a realizar las comunicaciones
- Número de serie (“SERIALNUMBER”) del certificado utilizado para las comunicaciones
- Entorno en el que se solicita el alta (INTEGRACIÓN y/o PRODUCCIÓN)
- Dirección (o rango) IP desde la que se realiza la conexión (sólo en caso de solicitar alta en el entorno de integración)
- Adjuntar al correo una copia de la parte pública del certificado que se utilizará para la comunicación de servicios, de forma que se pueda comprobar que la información suministrada es correcta y comprobar que es reconocido correctamente por el Registro.
La información que facilitan para la especificación de la firma electrónica es la siguiente:
Las llamadas al servicio web deberán implementar el estándar “Web Services Security” (WS-Security), garantizando la autenticidad e integridad de los datos remitidos. La confidencialidad se garantizará al utilizarse HTTPS como protocolo de transporte.
Los mensajes deberán firmarse con un certificado de entidad único para cada entidad (persona jurídica) autorizada.
El mensaje SOAP se enviará junto con los datos de firma digital XML y un BinarySecurityToken que contenga la parte pública del certificado utilizado.
Se muestra a continuación un ejemplo de petición SOAP, con el nodo de firma WS-Security:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:vtc="http://mfom.com/vtc"> 
<soapenv:Header><wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"><wsse:BinarySecurityToken EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" wsu:Id="X509-8E8323448EEC46F5B41559339975629101">MIIGoDCC……………..……UNAD/Mif8A=</wsse:BinarySecurityToken><ds:Signature Id="SIG-8E8323448EEC46F5B41559339975632105" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"><ds:SignedInfo><ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"><ec:InclusiveNamespaces PrefixList="soapenv vtc" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"/></ds:CanonicalizationMethod><ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/><ds:Reference URI="#id-8E8323448EEC46F5B41559339975630104"><ds:Transforms><ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"><ec:InclusiveNamespaces PrefixList="vtc" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"/></ds:Transform></ds:Transforms><ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><ds:DigestValue>cf2SHSHaZhYkbe6ypSbJAT+FsLM=</ds:DigestValue></ds:Reference></ds:SignedInfo><ds:SignatureValue>dvxXH………………...ctviyCg==</ds:SignatureValue><ds:KeyInfo Id="KI-8E8323448EEC46F5B41559339975629102"><wsse:SecurityTokenReference wsu:Id="STR-8E8323448EEC46F5B41559339975629103"><wsse:Reference URI="#X509-8E8323448EEC46F5B41559339975629101" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/></wsse:SecurityTokenReference></ds:KeyInfo></ds:Signature></wsse:Security></soapenv:Header> 
<soapenv:Body wsu:Id="id-8E8323448EEC46F5B41559339975630104" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> 
<vtc:qaltavtc> 
<header fecha="2019-01-01T12:29:00" version="1.0" versionsender="1.0"/> 
<body> 
<vtcservicio cgmunicontrato="079" cgmunifin="079" cgmuniinicio="079" cgmunilejano="079" cgprovcontrato="28" cgprovfin="28" cgprovinicio="28" cgprovlejano="28" direccionfin="destino" direccioninicio="origen" direccionlejano="lejano" fcontrato="2019-01-01" ffin="2019-12-31" fprevistainicio="2019-12-31T15:00:00" matricula="9999-ZZZ" nifarrendador="99999999R" nifarrendatario="123456789" niftitular="11111111H" nombarrendador="ARRENDADOR" nombarrendatario="ARRENDATARIO" nombtitular="TITULAR"/> 
</body> 
</vtc:qaltavtc> 
</soapenv:Body> 
</soapenv:Envelope>

El código anterior es para la comunicación de un nuevo traslado (Alta de servicio), las otras funciones que existen son:
[0] => rconsultavtc ConsultaDeServicio(qconsultavtc $pqconsultavtc)
[1] => raltavtc AltaDeServicio(qaltavtc $pqaltavtc)
[2] => ranulacionvtc AnulacionDeServicio(qanulacionvtc $pqiniciovtc)
[3] => rmodificacionvtc ModificacionDeServicio(qmodificacionvtc $pqmodificacionvtc)
[4] => riniciovtc InicioDeServicio(qiniciovtc $pqiniciovtc)

Posiblemente la función más sencilla de llamar sea la primera (ConsultaDeServicio) dado que sólo hay que pasarle la información de fecha="2019-01-01T12:29:00" version="1.0" versionsender="1.0" en la cabecera y el idservicio="xxxxxxx", donde xxxxxx es un número único que se asigna a cada servicio al darlo de alta.
He probado desde SOAP UI la función de Consulta de servicio y no da ningún problema.
El acceso se realiza mediante el certificado digital, no existe un par usuario contraseña, que es lo más extendido por la Web.
Probé sin éxito (supongo que definiría algo mal) soap-wsse, nusoap-0.9.5, xmlseclibs y no se cuantas otras cosas mas.
Si alguien tiene una idea de por donde pueden ir los tiros le quedaría eternamente agradecida si comparte su sabiduría.

Lo que pretendo hacer es una página web programada en PHP en la cual introduciendo el id del servicio me muestre la información asociada al mismo (función ConsultaDeServicio) y otra que permita indicar el inicio del mismo (InicioDeServicio) a las dos le pasaría por POST el id del servicio y recuperaría la respuesta obtenida.
Me estrello, una y otra vez con la llamada con la petición de datos creo que por el certificado digital, he probado con otros métodos SOAP sacados por Internet (como la conversión de grados centigrados a farenhait) y no había problemas, pero claro tampoco había certificados por el medio.

Muchas gracias a todos, estoy abierta a cualquier sugerencia.
Tags: Digital Certificate - PHP - Question - SOAP - SoapClient Votes: 0 - Answers: 16 - Views: 15 Share on: Google Facebook Twitter LinkedIn Link
 

Answers:

  • Date: 01-03-2020 06:29:22 Aquí hay un par de recursos que te pueden ayudar

    https://github.com/WsdlToPhp/WsSecurity/blob/develop/README.md

    https://gist.github.com/mathdev/3280448
      Votes: 0 - Link answer
     
  • Date: 01-03-2020 06:47:34 Hola Mauro, gracias por tu respuesta, el problema que tengo es que la identificación no se hace mediante usuario-contraseña, hay que realizarla mediante certificado digital, he mirado por encima (ahora lo haré con más detalle) y creo que en los enlaces que me adjuntas utiliza solo el par usuario-contraseña.Pdf comprimido con las instrucciones del Ministerio de Fomento.   Votes: 0 - Link answer
     
  • Date: 02-03-2020 01:36:20 Acá hay otro ejemplo que podría ayudar: https://www.example-code.com/phpExt/xmldsig_sign_with_binarysecuritytoken.asp   Votes: 0 - Link answer
     
  • Date: 09-03-2020 08:09:02 Gracias nuevamente Mauro, no conseguí nada.   Votes: 0 - Link answer
     
  • Date: 15-02-2022 00:02:59 Buenas Silvia, ¿lo conseguiste resolver? Si es que sí, ¿comó?   Votes: 1 - Link answer
     
  • Date: 15-02-2022 06:40:35 Buenas tardes Silvia, al final cómo quedó el tema? Muchas gracias.   Votes: 0 - Link answer
     
  • Date: 28-07-2022 11:52:10 Por si hay alguien todavía siguiendo este hilo, escribí este artículo con un ejemplo de cómo conectarse a un WebService que usa certificado digital para autenticarse.   Votes: 0 - Link answer
     
  • Date: 21-10-2022 04:00:39 Hemos seguido el manual pero seguimos obteniendo el código de error 51, ¿alguien puede ayudarnos con esto?   Votes: 0 - Link answer
     
  • Date: 21-10-2022 05:04:31 ¿Tienes algún mensaje asociado al error?   Votes: 0 - Link answer
     
  • Date: 21-10-2022 08:22:59 Si - 51: El NIF que comunica no puede crear
    servicios para ese intermediario y el registro
      Votes: 0 - Link answer
     
  • Date: 22-06-2023 07:13:41 ¿Al final alguien consiguió conectar? Estoy teniendo muchos problemas para realizar este proceso, no consigo que mi código PHP reciba respuesta a pesar de seguir todos los pasos del manual.   Votes: 0 - Link answer
     
  • Date: 23-06-2023 06:04:52 ¿Probaste realizar la conexión por fuera de PHP? Tal vez usando SoapUI o alguna herramienta similar.

    Lo primero que te sugeriría es que verifiques que el problema no sea de infraestructura. Si logras conectar fuera de PHP luego escribir el código no será un problema.

    Saludos
      Votes: 0 - Link answer
     
  • Date: 23-06-2023 06:24:35 De hecho SoapUI al intentar iniciar el proyecto me suelta el siguiente error

    Error loading [https://presede.mitma.gob.es/MFOM.Services.VTC.Server/VTCPort?wsdl]: java.lang.Exception: Failed to load url; https://presede.mitma.gob.es/MFOM.Services.VTC.Server/VTCPort?wsdl, 0
      Votes: 0 - Link answer
     
  • Date: 26-06-2023 23:27:32 Ya veo. Por lo que veo se me ocurren algunas opciones:

    1 - Que la URL que estás solicitando no sea correcta. ¿Puede ser que esté retornando algo que no sea XML?
    2 - Que no tengas permisos para accederla

    En cualquier caso, el problema no está directametne relacionado con tu código php. Deberías intentar conectar con el servicio por fuera de tu script y, una vez lo consigas, pasarlo a código para automatizar el proceso.

    Saludos,
      Votes: 0 - Link answer
     
  • Date: 06-09-2023 23:09:43 Buenos días gente.
    Llego a este hilo justo porque me ha salido una tarea que es precisamente lo que se comenta aquí.
    La compañera Silvia ha adjuntado una documentación que es antigua. Esta semana he contactado con el Mitme y me han una documentación más nueva, que es de la v.2.3.
    No me sorprende que viniendo del gobierno, el webservice sea un Soap con olor a naftalina xD
    ¿Alguien ha conseguido realizar esta tarea con éxito?

    Gracias
    Saludos
      Votes: 0 - Link answer
     
  •  
      0  
     
    Date: 07-11-2023 01:03:04 Estoy ahora mismo trabajando en el mismo proyecto.
    He logrado realizar correctamente la conexión por certificado y imprimir funcciones y tipos. Cuando intento realizar la consulta __soapCall a "ConsultaDeServicio" me sale siempre el error "no WS-Security results".
    A ver si alguien puede ayudarnos:

    FUNCTIONS:
    array(5) {
    [0]=>
    string(60) "rconsultavtc ConsultaDeServicio(qconsultavtc $pqconsultavtc)"
    [1]=>
    string(44) "raltavtc AltaDeServicio(qaltavtc $pqaltavtc)"
    [2]=>
    string(61) "ranulacionvtc AnulacionDeServicio(qanulacionvtc $pqiniciovtc)"
    [3]=>
    string(76) "rmodificacionvtc ModificacionDeServicio(qmodificacionvtc $pqmodificacionvtc)"
    [4]=>
    string(52) "riniciovtc InicioDeServicio(qiniciovtc $pqiniciovtc)"
    }



    552344 bytes of memory used.
    Processing time: 1699353756.8059 seconds.


    TYPES:
    array(28) {
    [0]=>
    string(56) "struct qaltavtc {
    HEADERTYPE header;
    ABODYTYPE body;
    }"
    [1]=>
    string(61) "struct qanulacionvtc {
    HEADERTYPE header;
    NBODYTYPE body;
    }"
    [2]=>
    string(60) "struct qconsultavtc {
    HEADERTYPE header;
    CBODYTYPE body;
    }"
    [3]=>
    string(58) "struct qiniciovtc {
    HEADERTYPE header;
    IBODYTYPE body;
    }"
    [4]=>
    string(64) "struct qmodificacionvtc {
    HEADERTYPE header;
    MBODYTYPE body;
    }"
    [5]=>
    string(59) "struct raltavtc {
    HEADERTYPE header;
    ABODYTYPERES body;
    }"
    [6]=>
    string(64) "struct ranulacionvtc {
    HEADERTYPE header;
    ABODYTYPERES body;
    }"
    [7]=>
    string(63) "struct rconsultavtc {
    HEADERTYPE header;
    CBODYTYPERES body;
    }"
    [8]=>
    string(61) "struct riniciovtc {
    HEADERTYPE header;
    ABODYTYPERES body;
    }"
    [9]=>
    string(67) "struct rmodificacionvtc {
    HEADERTYPE header;
    ABODYTYPERES body;
    }"
    [10]=>
    string(78) "struct HEADERTYPE {
    string version;
    string versionsender;
    dateTime fecha;
    }"
    [11]=>
    string(47) "struct CBODYTYPE {
    EVTCCONSULTA vtcconsulta;
    }"
    [12]=>
    string(41) "struct EVTCCONSULTA {
    long idservicio;
    }"
    [13]=>
    string(89) "struct CBODYTYPERES {
    EVTCSERVICIOEMPRE vtcservicio;
    string resultado;
    long iderror;
    }"
    [14]=>
    string(491) "struct EVTCSERVICIOEMPRE {
    string matricula;
    string niftitular;
    string nif;
    string nom;
    string nombtitular;
    string cgprovcontrato;
    string cgmunicontrato;
    string numa;
    dateTime fcontrato;
    string cgprovinicio;
    string cgmuniinicio;
    string direccioninicio;
    dateTime fprevistainicio;
    dateTime finicio;
    string cgprovfin;
    string cgmunifin;
    string direccionfin;
    date ffin;
    string cgprovlejano;
    string cgmunilejano;
    string direccionlejano;
    dateTime fanulacion;
    IDVERAZ veraz;
    }"
    [15]=>
    string(52) "struct ABODYTYPE {
    EVTCSERVICIOEMPRE vtcservicio;
    }"
    [16]=>
    string(93) "struct ABODYTYPERES {
    EVTCSERVICIORESPUESTA vtcservicio;
    string resultado;
    long iderror;
    }"
    [17]=>
    string(68) "struct EVTCSERVICIORESPUESTA {
    long idservicio;
    long idcomunica;
    }"
    [18]=>
    string(48) "struct NBODYTYPE {
    EVTCANULACION vtcservicio;
    }"
    [19]=>
    string(42) "struct EVTCANULACION {
    long idservicio;
    }"
    [20]=>
    string(47) "struct MBODYTYPE {
    EVTCMODIFICA vtcservicio;
    }"
    [21]=>
    string(189) "struct EVTCMODIFICA {
    long idservicio;
    string cgprovfin;
    string cgmunifin;
    string direccionfin;
    string cgprovlejano;
    string cgmunilejano;
    string direccionlejano;
    string matricula;
    }"
    [22]=>
    string(45) "struct IBODYTYPE {
    EVTCINICIO vtcservicio;
    }"
    [23]=>
    string(39) "struct EVTCINICIO {
    long idservicio;
    }"
    [24]=>
    string(926) "struct EVTCSERVICIO {
    string niftitular;
    string nombtitular;
    string nifarrendador;
    string nombarrendador;
    string nifarrendatario;
    string nombarrendatario;
    string nombprovcontrato;
    string nombmunicontrato;
    string cgprovcontrato;
    string cgmunicontrato;
    dateTime fcontrato;
    string matricula;
    string numa;
    string ccaaautoriza;
    string nombccaaautoriza;
    string ccaainicio;
    string nombccaainicio;
    string nombprovinicio;
    string nombmuniinicio;
    string cgprovinicio;
    string cgmuniinicio;
    string direccioninicio;
    dateTime fprevistainicio;
    dateTime finicio;
    string ccaafin;
    string nombccaafin;
    string nombprovfin;
    string nombmunifin;
    string cgprovfin;
    string cgmunifin;
    string direccionfin;
    date ffin;
    string ccaalejano;
    string nombccaalejano;
    string nombprovlejano;
    string nombmunilejano;
    string cgprovlejano;
    string cgmunilejano;
    string direccionlejano;
    string infraccion;
    dateTime fanulacion;
    }"
    [25]=>
    string(51) "struct EVTCSERVICIOS {
    EVTCSERVICIO vtcservicio;
    }"
    [26]=>
    string(14) "string IDVERAZ"
    [27]=>
    string(41) "struct SOAPException {
    string message;
    }"
    }
      Votes: 0 - Link answer
     
To actively participate in the community first must authenticate, enter the system.Sign In
 
frjcbbae garagebible.com