Solución a problemas con la nueva Resolución General ARCA N° 5.616/2024:

Usar web services de ARCA en Java

Con pocas líneas de código

Ivan Muñoz ene 10, 2025 - Ultima edicion feb 22, 2025
Java

Usar web services de ARCA en Java

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.

Conéctate a ARCA hoy mismo

Certificados, código, tutoriales, soporte... todo lo que necesitas para usar los web services de ARCA en un solo lugar.