1. API Obtención de llave pública v1Con esta API puedes obtener la llave pública de transporte necesaria para implementar el mecanismo de encriptación híbrida para cifrar la FIEL que se requiere para realizar una solicitud de descargas hacia el SAT; esto asegura el transporte de información de manera segura entre tu desarrollo y las APIs de CONTPAQi® Nube.
API síncrona
La llave pública tiene las siguientes características:
Métodos o Endpoints de la API
GET: Obtiene la llave pública necesaria en el proceso de cifrado de la FIEL u otra información sensible.
Encabezado de la solicitud:
Respuesta exitosa: 200 OK
Retorna la siguiente información de la llave pública:
Respuesta fallida:
Retorna la siguiente información de la llave pública:
![]() Proceso de encripción de la FIEL
La FIEL o e.firma es el conjunto de datos y caracteres que te identifica al realizar trámites y servicios por internet en el SAT, así como en otras Dependencias, Entidades Federativas, Municipios y la iniciativa privada.
Es única y tiene la validez de una firma autógrafa, por esta razón es importante usar mecanismos de encriptación para que la transferencia de la FIEL sea segura en el proceso de descargas.
Pasos para encriptar:
1. Obtén la llave pública con la API de Obtención de llave pública.
2. Guarda la llave pública en un archivo .pem.
3. Obtén el contenido de la FIEL en bytes: archivo .cer, archivo .key y la contraseña.
4. Genera una llave de sesión.
5. Encripta cada parte de la FIEL con la llave de sesión con el algoritmo AES.
6. Genera una llave de transporte encriptando la llave de sesión con la llave pública RSA.
7. Prepara los datos encriptados para mandarlos a la API de Descarga.
Posibles respuestas:
Escenario éxito:
{ "base64Key": "xxxxxxxxxx", "version": "xxxxxxxxx", "usage": "encrypt|decrypt|sign|verify|wrapKey|unwrapKey", "keyType": "RSA", "expirationDate": null, "size": 2048 }
Escenario falla:
Clave de suscripción no corresponde, inválida, nulo o vacío.
{ "status": 401, "type": "https://tools.ietf.org/html/rfc7231#section-6.5", "title": "Subscription Key inválido.", "detail": "Acceso denegado. Encabezado Subscription-Key no especificado o inválido.", "errors": null, "traceId": "" }
Clave de suscripción original regenerada
{ "statusCode": 401, "message": "Access denied due to invalid subscription key. Make sure to provide a valid key for an active subscription." }
Código de licencia existente pero no corresponde con el subscriptionkey
{ "status": 403, "title": "Error al validar la suscripción.", "detail": "El código de licencia especificado no corresponde al Subscription Key.", "errors": null, "traceId": "68326832-a578-4bbd-b4b7-61223e28ce0c" }
Código de licencia inexistente o inválidos (incompleto, con caracteres adicionales, etc.)
{ "status": 404, "title": "El servidor no pudo encontrar el recurso o los recursos solicitados.", "detail": "La licencia especificada no existe o no cuenta con el servicio.", "errors": null, "traceId": "052f770d-f296-4f0a-b21a-d122ba9a887d" }
Código de licencia nulo o vacío
{ "status": 400, "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1", "title": "Error en la solicitud.", "detail": "Encabezado Ocp-Apim-License-Code requerido", "errors": null, "traceId": "ff59d54b-98d9-4bb8-b793-7229243c7f0f" }
{ "status": 500, "type": "https://tools.ietf.org/html/rfc7231#section-6.6.1", "title": "Error no controlado", "detail": "Error no controlado, inténtelo de nuevo más tarde.", "traceId": null, "errors": null }
{ "status": 400, "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1", "title": "Error en la solicitud.", "detail": "Encabezado Ocp-Apim-License-Code requerido", "errors": null, "traceId": "3d30b0f4-58be-46c4-8ba4-64eb5df20544" }
{ "status": 404, "title": "El servidor no pudo encontrar el recurso o los recursos solicitados.", "detail": "La licencia especificada no existe o no cuenta con el servicio.", "errors": null, "traceId": "2ee0265b-5fa0-42a6-8d0c-c27e6bbe92ad" }
{ "status": 402, "type": "https://tools.ietf.org/html/rfc7235#section-3.1", "title": "Servicio de licencia inválido.", "detail": "El servicio CONTPAQi® Descarga no tiene vigencia.", "errors": null, "traceId": "79b9c4bc-8d38-416f-b548-0b04be7e0db5" }
¿Qué significa que el servicio está bloqueado, en qué casos pasa?
{ "status": 402, "title": "Servicio de licencia inválido.", "detail": "El servicio o módulo de la licencia se encuentra deshabilitado.", "errors": null, "traceId": "74a25b30-b832-43c8-8600-a127e3e97f8a" }
|