Esta API utiliza los certificados digitales en formato PEM, por lo que es necesario convertir desde PFX a PEM antes de ingresarlos. Para esto se utiliza el modulo openssl incluido en la mayoria de sistemas.
- Ingresar a la carpeta donde se ubique el certificado pfx.
- Abrir terminal e ingresar el siguiente comando
openssl pkcs12 -in in_file.pfx -out out_file.pem -nodes
-
Desactivar seguridad para aceptar certificados de 1024 bit modificando openssl.cnf, cambiar a @seclevel=1 ver aqui
- Para ubicar el archivo openssl.cnf a configurar se puede ejecutar el comando
openssl version -d
- Abrir el archivo previamente ubicado e incluir lo siguiente:
-
En la parte superior incluir:
openssl_conf = default_conf
-
En la parte final incluir :
[ default_conf ] ssl_conf = ssl_sect [ssl_sect] system_default = system_default_sect [system_default_sect] MinProtocol = TLSv1.2 CipherString = DEFAULT:@SECLEVEL=1
-
- Para ubicar el archivo openssl.cnf a configurar se puede ejecutar el comando
-
Obtener los archivos desde respositorio git
-
Seguir las instruciones del manual de instalacion.
Antes de comenzar a utilizar los servicios de la API se debe autenticar el usuario, previamente creado en Django, y obtener un token de autenticacion. Para esto se debe enviar una peticion POST incluyendo el usario y contraseña en su body con el siguiente formato:
-
request.post('http://ip_host:port/auth', data={'username': "user" , "password": "pass"}
-
Esto devolvera un token de autenticacion a utilizar para tener acceso a la API, con el siguiente formato:
{"token":"80af2d944cbf55bfc2fec00b49f90dcd389626f2"}
como se ve en la imagen -
En caso de error retornara una alerta de credenciales invalidas como se ve en la imagen
Para obtener los folios se debe hacer una peticion GET a la direccion del servidor agregando '/api/solicitarFolios' con el siguiente formato:
request.get("http://ip_host:port/api/solicitarFolios", headers={"Authorization":"Token 80af2d944cbf55bfc2fec00b49f90dcd389626f2"}, data={"rut":"1234567-8","cant_folios":"1",'cod_doc':"33"}
Donde:
-
rut (str): El rut de la empresa a consultar. Debe ser enviado sin puntos, con guion y digito verificador.
-
cod_doc (str): El codigo del documento a solicitar.
-
cant_folios (str): La cantidad de folios que quieren solicitar, esta cantidad esa sujeta a disponibilidad del SII. Solicitar mas del permitidado llevara a un error notificando la cantidad maxima a solicitar.
-
Si la peticion se realizo correctamente la respuesta sera un json como se ve en la imagen
-
En caso contrario pueden ocurrir los siguientes escenarios:
-
Usuario ha sido deshabilitado en la pagina de administracion de Django. Retornara un json como se ve en la imagen
-
Usuario registra situaciones pendientes con el sii. Retornara un json como se ve en la imagen
-
Usuario solicita mas de los folios permitidos. Retornara un json notificando el error junto a la cantidad maxima de folios permitidos.
-
Usuario solicita un documento no permitido. Retornara un json notificando el error y texto de la alerta.
-
Para consultar los folios emitidos se debe hacer una peticion GET a la direccion del servidor agregrando '/api/consultarFolios' con el siguiente formato:
request.get("http://ip_host:port/api/consultarFolios", headers={"Authorization":"Token 80af2d944cbf55bfc2fec00b49f90dcd389626f2"}, data={"rut":"1234567-8",'cod_doc':"33"}
Donde:
- rut (str): El rut de la empresa a consultar. Debe ser enviado sin puntos, con guion y digito verificador.
- cod_doc (str): El codigo del documento a consultar.
- Si la peticion se realizo correctamente la respuesta sera un json como se ve en la imagen
- En caso contrario pueden ocurrir los siguientes escenarios:
Para anular folios se debe hacer una peticion GET a la direccion del servidor agregando '/api/deleteFolios' con el siguiente formato:
request.get("http://ip_host:port/api/deleteFolios", headers={"Authorization":"Token 80af2d944cbf55bfc2fec00b49f90dcd389626f2"}, data={"rut":"1234567-8","id":"33-1-100", "motivo":"motivo_anulacion", "folio_inicio":"1", "folio_final":"100"}
Donde:
-
rut (str): El rut de la empresa a consultar. Debe ser enviado sin puntos, con guion y digito verificador.
-
id (str): El id del folio a anular, este se obtiene al consultar los folios y sigue el formato:
codigoDocumento_folioInicial_folioFinal
-
motivo (str): El motivo de la cancelacion del folio.
-
folio_inicio(str): Numero del folio inicial a anular.
-
folio_final(str) : Numero del folio final a anular.
-
Si la peticion se realizo correctamente la respuesta sera un json como se ve en la imagen
-
En caso contrario pueden ocurrir los siguientes escenarios:
-
login(rut): esta funcion permite el inicio de sesion del webdriver. El rut ingresado debe corresponder al rut de algun cliente registrado, se buscara el certificado digital asociado al rut y realiza una peticion POST al SII.
-
class PedirFolios:
- get(request): esta funcion permite solicitar folios. El request debe incluir en su body el rut de la compañia, codigo del documento y cantidad de folios. En caso de exito retornara el XML obtenido y en caso de error notificara del tipo de error.
-
class AnularFolios:
- get(request): esta funcion permite anular folios. El request debe incluir en su body el rut de la compañia, el ID del folio, el motivo, el folio inicial y el final para anular. En caso de exito retornara la confirmacion de que se ha anulado el folio o la respuesta de ese folio ya ha sido anulado, en caso de error notificara el error.
-
class ConsultarFolios:
- get(request): esta funcion permite consultar folios. El request debe incluir en su body el rut de la compañia y el codigo del documento a consultar. En caso de exito retornara los folios existentes o la respuesta de que no existen folios, en caso de error notifica el error.