Saltar captcha al autenticar en portal CFDI del SAT

El SAT realiza cambios constantes internamente, por lo que este post se mantiene actualizado (última actualización 24/jun/2017).

En días recientes, el SAT realizó cambios en su portal CFDI para solicitar se resuelva un captcha al momento de autenticarse, lo cual causó problemas con varios servicios de descarga masiva de CFDIs. Uno de estos servicios es uno que desarrollamos hace algunos años con CSFacturación, así que hubo que buscar la manera de resolverlo.

Hay varias maneras para solucionar el problema:

  1. Generar un token de autenticación utilizando la llave privada de la FIEL del contribuyente (de la misma manera que lo hace el applet de java que utiliza el SAT en su portal).
  2. Utilizar un servicio externo de resolución de captchas como Anti Captcha.
  3. Utilizar un algoritmo propio con un OCR.
  4. Saltar el captcha completamente.

La opción 1) la exploré y hubo buenos resultados, pero requería el uso de la FIEL. La opción 2) es la que utilizamos para salir del problema inicialmente y aún está soportada para casos futuros. La opción 3) es algo más compleja y propensa a errores, hice un par de pruebas pero no hubo muy buenos resultados. La opción 4) es la que voy a explicar.

Después de investigar un poco, el SAT utiliza un servicio de autenticación provisto por NetIQ. Al entrar directamente a la URL del portal CFDI del SAT se utiliza un método de autenticación (SATUPCFDiCon) que requiere se resuelva un captcha, pero existe un método adicional que se manifiesta en ocasiones, por errores del portal del SAT. Este método no requiere un captcha, ejecutando las peticiones correctas es posible autenticarse y ejecutar peticiones autenticadas al portal del SAT sin resolver captchas. Este método parece ser temporal, sería muy bueno que el SAT incluyera opciones como OAuth para autenticarse de manera segura, pero seguramente eso no sucederá y terminaremos utilizando las opciones 1) o 2) en el futuro.

El método utilizado ha ido cambiando a lo largo del año, el último comprobado que funciona con los últimos cambios del 22 junio 2017 se describe a continuación.

Para que el SAT permita autenticarse con este nuevo método, se requiere el uso de cookies y una cadena de peticiones para que funcione:

# con esta petición se inicia el proceso, necesita realizarse
# para que el servidor establezca las cookies necesarias, el
# id del método de autenticación debe ser el 4
curl "https://cfdiau.sat.gob.mx/nidp/app/login?id=4&sid=0&option=credential" \
-H 'Accept: text/html' \
-c cookies.txt
# se realiza la autenticación mediante POST al recurso de 
# autenticación, se requiere enviar las cookies que estableció
# el servidor con la petición anterior
curl "https://cfdiau.sat.gob.mx/nidp/app/login?sid=0"
-H 'Accept: text/html' \
-d 'option=credential&Ecom_User_ID=RFC&Ecom_Password=CIEC' \
-b cookies.txt \
-c cookies.txt

Donde:

-c cookies.txt: Esta opción indica un archivo donde almacenar las cookies que devuelva el servidor en la respuesta.
-d ‘option=credential&Ecom_User_ID=RFC&Ecom_Password=CIEC&submit=Enviar’: El payload a enviar con la petición, cambiar los valores para ‘Ecom_User_ID’ y ‘Ecom_Password’ al RFC y CIEC, respectivamente, del contribuyente que se quiera autenticar.

Después de realizar la petición a través de POST, si se han establecido correctamente las credenciales de acceso, se podrá continuar con el flujo normal para completar la autenticación.

Puedes comprobar que la autenticación ha sido exitosa, ejecutando la siguiente petición GET:

curl 'https://cfdiau.sat.gob.mx/nidp/jsp/content.jsp?sid=0' \
-H 'Accept: text/html' \
-b cookies.txt \
-c cookies.txt

En el HTML de la respuesta debe haber este mensaje: Your session has been authenticated and is valid for 5 minutes.

Este método ha disminuido también los errores en la autenticación que se producen aleatoriamente al autenticarse utilizando el método SATUPCFDICon.