Cómo Obtener la Semilla del Servicio de Impuestos Internos (SII) en Java
Introducción:
Este código en Java muestra cómo hacer una solicitud al Servicio de Impuestos Internos (SII) de Chile para obtener la semilla que se necesita para enviar electrónicamente documentos relacionados con la facturación electrónica. La semilla es un valor único y temporal que se utiliza en el proceso de envío de documentos, pero este código solo se encarga de solicitar la semilla.
Es importante mencionar que después de obtener la semilla, deberás obtener el Token para enviar el documento correctamente. Este código es solo una parte del proceso.
Código
package setsimulacion;
import javax.xml.parsers.DocumentBuilder;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.StringReader;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPathExpressionException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import java.net.*;
public class Semilla {
public String getSeed() throws Exception {
try{
Config objConfig = new Config();
String direccion = "https://maullin.sii.cl/DTEWS/CrSeed.jws?WSDL";
URL url = new URL (direccion);
HttpURLConnection conexion = (HttpURLConnection) url.openConnection();
String inputsoap = "<soapenv:Envelope xmlns:soapenv=" + "\""+ "http://schemas.xmlsoap.org/soap/envelope/" + "\""+">"+
"<soapenv:Header/>"+
"<soapenv:Body>"+
"<getSeed></getSeed>"+
"</soapenv:Body>"+
"</soapenv:Envelope>";
ByteArrayOutputStream bout = new ByteArrayOutputStream();
byte[] buffer = new byte[inputsoap.length()];
buffer = inputsoap.getBytes();
bout.write(buffer);
byte[] b = bout.toByteArray();
conexion.setRequestProperty("Content-Length",String.valueOf(b.length));
conexion.setRequestProperty("Access-Control-Allow-Credentials" ,"true");
conexion.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
conexion.setRequestProperty("SOAPAction", "getSeed");
conexion.setDoOutput(true);
conexion.setDoInput(true);
//Write the content of the request to the outputstream of the HTTP Connection.
try (OutputStream out = conexion.getOutputStream()) {
//Write the content of the request to the outputstream of the HTTP Connection.
out.write(b);
}
String inputLine = new String();
String salida = new String();
try (BufferedReader in = new BufferedReader(new InputStreamReader(conexion.getInputStream()))) {
while ((inputLine = in.readLine()) != null)
salida = salida + inputLine;
}
salida = salida.replace("<", "<").replace(""","\"").replace(">",">");
String original = "<?xml version="+"\""+"1.0"+"\"" + " encoding="+"\""+ "UTF-8" + "\""+"?>";
String reemplazo = "";
salida = salida.replace(original,reemplazo);
System.out.print(salida);
String valorsemilla;
valorsemilla = readSeed(salida);
return valorsemilla;
}catch (IOException | ParserConfigurationException | SAXException | XPathExpressionException EX){
return "0";
}
}
public String readSeed(String request) throws ParserConfigurationException, SAXException, IOException,XPathExpressionException {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(false);
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new InputSource(new StringReader(request)));
NodeList nl = doc.getElementsByTagName("SEMILLA");
Element el = (Element) nl.item(0);
String valorsemilla = el.getFirstChild().getNodeValue();
return valorsemilla;
}
}
Propósito del Código:
Este ejemplo es únicamente con fines educativos. La interacción con el SII es esencial para la emisión de Documentos Tributarios Electrónicos (DTES), y la semilla obtenida es un componente importante para asegurar la autenticidad de los documentos. El código se basa en una solicitud SOAP, la cual se envía al servicio web del SII para obtener la semilla, que luego podrás usar en el proceso de Obtención de Token.
Advertencia:
Recuerda que este código está destinado a un entorno de pruebas y aprendizaje.
Explicación del Código:
Conexión HTTP con el servicio del SII: El código crea una conexión HTTP con la URL del servicio SOAP del SII. Aquí, el parámetro
direccion tiene el valor maullin.sii.cl, el cual es el servidor de pruebas del SII.
Petición SOAP: Se construye el cuerpo de la solicitud SOAP, que incluye la operación
getSeed
. Este es el mensaje que se enviará al servicio web del SII para obtener la semilla.Lectura de la respuesta: Después de enviar la solicitud, el código lee la respuesta XML del servicio y extrae la semilla usando un parser XML.
Función de extracción de la semilla: El método
readSeed()
se encarga de extraer la semilla del XML de respuesta y devolverla como un valor que luego se puede utilizar en la firma de documentos.
Proceso de Obtención de Token:
Una vez que tengas la semilla, el siguiente paso será utilizarla junto con tu con tu certificado digital para realizar la obtención del Token, el cual posteriormente se utiliza, para realizar el envío del documento, mediante una petición http.
Conclusión:
Este ejemplo es solo una pequeña parte del proceso de facturación electrónica, específicamente en la obtención de la semilla.
Comentarios
Publicar un comentario