Usar web services de ARCA en Java
Con pocas líneas de código

Consumir los web services de ARCA en Java puede ser un poco complicado, por eso vamos a utilizar la API de Afip SDK, que nos permite conectarnos a los web services de ARCA en Java sin complicarnos con el uso de SOAP y la autenticación.
Vamos a usar Gson para trabajar con JSON.
Añadimos la dependencia de Maven:
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.11.0</version>
</dependency>
Obtener la autorización
Lo primero que tenemos hacer es obtener el “Token authorization”, que seria la autorización en ARCA.
Para usar los web services de ARCA, se requiere un certificado digital, con Afip SDK puedes integrarte en modo desarrollo usando el CUIT 20409378472
sin necesidad de obtener un certificado, para poder integrarte lo más rápido posible.
Te dejo este enlace por si luego quieres usar tu propio certificado para desarrollo.
Debemos ejecutar una solicitud POST al endpoint
https://app.afipsdk.com/api/v1/afip/auth
package com.example;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
try {
// Paso 1: Obtener el Token Authorization
HttpClient client = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(15))
.build();
// Crear JSON para el request usando GSON
Map<String, String> authRequestMap = new LinkedHashMap<>();
authRequestMap.put("environment", "dev");
authRequestMap.put("tax_id", "20409378472");
authRequestMap.put("wsid", "wsct");
Gson gson = new Gson();
String authRequestBody = gson.toJson(authRequestMap);
HttpRequest authRequest = HttpRequest.newBuilder()
.uri(new URI("https://app.afipsdk.com/api/v1/afip/auth"))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(authRequestBody))
.build();
HttpResponse<String> authResponse = client.send(authRequest, HttpResponse.BodyHandlers.ofString());
if (authResponse.statusCode() >= 400) {
System.out.println("Error in auth request: " + authResponse.body());
return;
}
// Parsear respuesta para extraer el sign y token usando GSON
Type mapType = new TypeToken<Map<String, String>>() {}.getType();
Map<String, String> authData = gson.fromJson(authResponse.body(), mapType);
String token = authData.get("token");
String sign = authData.get("sign");
System.out.println("Token: " + token);
System.out.println("Sign: " + sign);
} catch (Exception e) {
e.printStackTrace();
}
}
}
En este ejemplo utilizamos el web service id wsct "wsid": "wsct"
, el cual corresponde al web service de comprobantes de turismo.
En la pestaña “API” de la documentacion podes consultar todos los parametros del endpoint.
Ahora tenemos token y sign que nos dio ARCA para usar el web service. No es necesario que lo guardemos, Afip SDK se encarga de esto por nosotros, debemos solicitarlo antes de cada llamada a los métodos del web service.
Llamar al web service
Para este ejemplo vamos a consultar el ultimo comprobante autorizado llamando al metodo consultarUltimoComprobanteAutorizado
.
Debemos ejecutar una solicitud POST al endpoint
https://app.afipsdk.com/api/v1/afip/requests
// Paso 2: Preparar los datos de la consulta
Map<String, Object> invoiceRequestMap = new LinkedHashMap<>();
invoiceRequestMap.put("environment", "dev");
invoiceRequestMap.put("method", "consultarUltimoComprobanteAutorizado");
invoiceRequestMap.put("wsid", "wsct");
invoiceRequestMap.put("url", "https://fwshomo.afip.gov.ar/wsct/CTService");
invoiceRequestMap.put("wsdl", "https://fwshomo.afip.gov.ar/wsct/CTService?wsdl");
invoiceRequestMap.put("soap_v_1_2", false);
Map<String, Object> authParams = new LinkedHashMap<>();
authParams.put("token", token);
authParams.put("sign", sign);
authParams.put("cuitRepresentada", "20409378472");
Map<String, Object> params = new LinkedHashMap<>();
params.put("authRequest", authParams);
params.put("codigoTipoComprobante", 195);
params.put("numeroPuntoVenta", 1);
invoiceRequestMap.put("params", params);
String invoiceRequestBody = gson.toJson(invoiceRequestMap);
HttpRequest invoiceRequest = HttpRequest.newBuilder()
.uri(new URI("https://app.afipsdk.com/api/v1/afip/requests"))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(invoiceRequestBody))
.build();
HttpResponse<String> invoiceResponse = client.send(invoiceRequest, HttpResponse.BodyHandlers.ofString());
if (invoiceResponse.statusCode() >= 400) {
System.out.println("Error in invoice request: " + invoiceResponse.body());
return;
}
System.out.println("Invoice Response: " + invoiceResponse.body());
En la pestaña “API” de la documentacion podes consultar todos los parametros del endpoint.
En invoiceResponse.body()
nos devolverá la respuesta del web service.
{
"consultarUltimoComprobanteAutorizadoReturn": ...,
}
Con esto ya podemos conectarnos a cualquier web service de ARCA con Java.
Lo único que nos queda es pasar a modo producción.
Ante cualquier duda o pregunta al respecto, pueden resolverla rápidamente dentro de la Comunidad Afip SDK. Además, puedes unirte para estar al tanto de las novedades y problemas técnicos al usar los servicios de ARCA.