Gabriel
2012-04-09 12:09:01 UTC
Buenas.
Pues eso, tengo la necesidad de acceder a un WS seguro con certificado
y tarjeta de firma digital de microchip.
Antes que nada, decir que todo está correctamente instalado ya que
haciendo uso de la aplicación SoapUI (versión 4.0.1) todo va bien.
Tengo los siguientes problemas. Si tienen la paciencia de leer (lo
intento explicar lo mejor posible), me "conformo" con que me contesten
alguno.
_________________________________________________________________________
1.- El WS lo tengo registrado en SoapUI, como comento, y tengo
especificado en la configuración tanto en qué carpeta está el
certificado, como la clave para el mismo. Cuando ejecuto desde esta
aplicación una solicitud, ésta se realiza SIN que salte ventana de
petición de certificado (ya que éste se haya indicado en las
propiedades).
Ahora bien, si lo hago desde la línea de comandos de VFP:
oHTTP=Create('MSXML2.XMLHTTP')
oHTTP.Open("post", "https://www.proyectoencuestion.es/rutaCERT/
proyecto.php?wsdl", .F.)
oHTTP.setRequestHeader("Content-Type", "text/xml")
oHTTP.setRequestHeader("SOAPAction", "http://www.direccion.es/
proyecto#test")
cTXT=FILETOSTR("c:\TEST.XML")
oHTTP.SEND(cTXT)
Me salta una ventana de "Elegir un certificado digital", en el que
tengo que seleccionar el mío.
¿Cómo puedo hacer para pasar el certificado y la contraseña por código
y no lo pida (como pasa con SoapUI?
He probado con
oHTTP.Open("post", "https://www.proyectoencuestion.es/rutaCERT/
proyecto.php?wsdl", .F., cRutaCert, cClave)
Y sigue saltando la ventana de selección de certificado.
_________________________________________________________________________
2.- En realidad, no todos los métodos del WS con el que tengo que
conectar requieren acceso con certificado o firma digital. Si desde
SoapUI hago un "request" de esos métodos con la tarjeta de microchip
EXTRAÍDA del lector, me devuelve el XML de contestación correctamente.
Pero si esto mismo lo intento desde línea de comando de VFP, el hecho
de no tener la tarjeta insertada en el lector hace que la respuesta
sea siempre de acceso prohibido.
¿Hay algo que se me escapa?
_________________________________________________________________________
3.- Lo que he contado en el punto 1, aunque a grandes rasgos es así,
en detalle no es exactamente eso. Tengo otro problema añadido a la
petición del certificado.
Si desde el vfp realizo los pasos que comento, terminando con lo de
oHTTP.SEND(cTXT)
Me salta la ventana de petición del certificado y después de
seleccionado, el Fox se queda "como pillado" durante casi dos minutos
y al final devuelve un error
"Código de excepción OLE IDispatch 0 de msxml3.dll: Error del sistema:
-2146697208"
Si justo después, sobre el mismo vfp, hago
RELEASE ALL
Y vuelvo a empezar:
oHTTP=Create('MSXML2.XMLHTTP')
oHTTP.Open("post", "https://www.proyectoencuestion.es/rutaCERT/
proyecto.php?wsdl", .F.)
oHTTP.setRequestHeader("Content-Type", "text/xml")
oHTTP.setRequestHeader("SOAPAction", "http://www.direccion.es/
proyecto#test")
cTXT=FILETOSTR("c:\TEST.XML")
oHTTP.SEND(cTXT)
Ahora todo va fluido, va bien y recibo respuesta correcta.
He encontrado que si la primera vez, en vez de hacer oHTTP.SEND(cTXT)
hago oHTTP.SEND(), no se produce ese "atasco" de dos minutos, pide
rápido el certificado y contesta rápido. Por supuesto la respuesta es
de error ya que no he enviado nada, pero no se queda pillado el fox.
Si a continuación hago RELEASE ALL y vuelvo a empezar (sin cerrar el
fox)
oHTTP=Create('MSXML2.XMLHTTP')
oHTTP.Open("post", "https://www.proyectoencuestion.es/rutaCERT/
proyecto.php?wsdl", .F.)
oHTTP.setRequestHeader("Content-Type", "text/xml")
oHTTP.setRequestHeader("SOAPAction", "http://www.direccion.es/
proyecto#test")
cTXT=FILETOSTR("c:\TEST.XML")
oHTTP.SEND(cTXT)
Ahora va todo bien.
_________________________________________________________________________
Realmente son todos problemas para mí a cada cual más raro. Por eso,
si has tenido la paciencia de leer hasta aquí, me conformo con alguna
pista para algo de lo expuesto.
Muchas gracias por el tiempo y un saludo.
Pues eso, tengo la necesidad de acceder a un WS seguro con certificado
y tarjeta de firma digital de microchip.
Antes que nada, decir que todo está correctamente instalado ya que
haciendo uso de la aplicación SoapUI (versión 4.0.1) todo va bien.
Tengo los siguientes problemas. Si tienen la paciencia de leer (lo
intento explicar lo mejor posible), me "conformo" con que me contesten
alguno.
_________________________________________________________________________
1.- El WS lo tengo registrado en SoapUI, como comento, y tengo
especificado en la configuración tanto en qué carpeta está el
certificado, como la clave para el mismo. Cuando ejecuto desde esta
aplicación una solicitud, ésta se realiza SIN que salte ventana de
petición de certificado (ya que éste se haya indicado en las
propiedades).
Ahora bien, si lo hago desde la línea de comandos de VFP:
oHTTP=Create('MSXML2.XMLHTTP')
oHTTP.Open("post", "https://www.proyectoencuestion.es/rutaCERT/
proyecto.php?wsdl", .F.)
oHTTP.setRequestHeader("Content-Type", "text/xml")
oHTTP.setRequestHeader("SOAPAction", "http://www.direccion.es/
proyecto#test")
cTXT=FILETOSTR("c:\TEST.XML")
oHTTP.SEND(cTXT)
Me salta una ventana de "Elegir un certificado digital", en el que
tengo que seleccionar el mío.
¿Cómo puedo hacer para pasar el certificado y la contraseña por código
y no lo pida (como pasa con SoapUI?
He probado con
oHTTP.Open("post", "https://www.proyectoencuestion.es/rutaCERT/
proyecto.php?wsdl", .F., cRutaCert, cClave)
Y sigue saltando la ventana de selección de certificado.
_________________________________________________________________________
2.- En realidad, no todos los métodos del WS con el que tengo que
conectar requieren acceso con certificado o firma digital. Si desde
SoapUI hago un "request" de esos métodos con la tarjeta de microchip
EXTRAÍDA del lector, me devuelve el XML de contestación correctamente.
Pero si esto mismo lo intento desde línea de comando de VFP, el hecho
de no tener la tarjeta insertada en el lector hace que la respuesta
sea siempre de acceso prohibido.
¿Hay algo que se me escapa?
_________________________________________________________________________
3.- Lo que he contado en el punto 1, aunque a grandes rasgos es así,
en detalle no es exactamente eso. Tengo otro problema añadido a la
petición del certificado.
Si desde el vfp realizo los pasos que comento, terminando con lo de
oHTTP.SEND(cTXT)
Me salta la ventana de petición del certificado y después de
seleccionado, el Fox se queda "como pillado" durante casi dos minutos
y al final devuelve un error
"Código de excepción OLE IDispatch 0 de msxml3.dll: Error del sistema:
-2146697208"
Si justo después, sobre el mismo vfp, hago
RELEASE ALL
Y vuelvo a empezar:
oHTTP=Create('MSXML2.XMLHTTP')
oHTTP.Open("post", "https://www.proyectoencuestion.es/rutaCERT/
proyecto.php?wsdl", .F.)
oHTTP.setRequestHeader("Content-Type", "text/xml")
oHTTP.setRequestHeader("SOAPAction", "http://www.direccion.es/
proyecto#test")
cTXT=FILETOSTR("c:\TEST.XML")
oHTTP.SEND(cTXT)
Ahora todo va fluido, va bien y recibo respuesta correcta.
He encontrado que si la primera vez, en vez de hacer oHTTP.SEND(cTXT)
hago oHTTP.SEND(), no se produce ese "atasco" de dos minutos, pide
rápido el certificado y contesta rápido. Por supuesto la respuesta es
de error ya que no he enviado nada, pero no se queda pillado el fox.
Si a continuación hago RELEASE ALL y vuelvo a empezar (sin cerrar el
fox)
oHTTP=Create('MSXML2.XMLHTTP')
oHTTP.Open("post", "https://www.proyectoencuestion.es/rutaCERT/
proyecto.php?wsdl", .F.)
oHTTP.setRequestHeader("Content-Type", "text/xml")
oHTTP.setRequestHeader("SOAPAction", "http://www.direccion.es/
proyecto#test")
cTXT=FILETOSTR("c:\TEST.XML")
oHTTP.SEND(cTXT)
Ahora va todo bien.
_________________________________________________________________________
Realmente son todos problemas para mí a cada cual más raro. Por eso,
si has tenido la paciencia de leer hasta aquí, me conformo con alguna
pista para algo de lo expuesto.
Muchas gracias por el tiempo y un saludo.