Factura Electrónica


Solicitud
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;

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.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.ArrayList;

// Deben cambiar los datos de "params" por los que correspondan. 
// Esta request de ejemplo incluye todos posibles valores para 
// llamar al metodo FECAESolicitar, puede que algun valor sea opcional.
Map<String, Object> data = new LinkedHashMap<>();
    data.put("environment", "dev");
    data.put("method", "FECAESolicitar");
    data.put("wsid", "wsfe");
    Map<String, Object> params = new LinkedHashMap<>();
    data.put("params", params);
        Map<String, Object> Auth = new LinkedHashMap<>();
        params.put("Auth", Auth);
            Auth.put("Token", "string");
            Auth.put("Sign", "string");
            Auth.put("Cuit", 1);
        Map<String, Object> FeCAEReq = new LinkedHashMap<>();
        params.put("FeCAEReq", FeCAEReq);
            Map<String, Object> FeCabReq = new LinkedHashMap<>();
            FeCAEReq.put("FeCabReq", FeCabReq);
                FeCabReq.put("CantReg", 1);
                FeCabReq.put("PtoVta", 1);
                FeCabReq.put("CbteTipo", 1);
            Map<String, Object> FeDetReq = new LinkedHashMap<>();
            FeCAEReq.put("FeDetReq", FeDetReq);
                List<Object> FECAEDetRequest = new ArrayList<Object>();
                FeDetReq.put("FECAEDetRequest", FECAEDetRequest);
                    Map<String, Object> FECAEDetRequest0 = new LinkedHashMap<>();
                    FECAEDetRequest.add(FECAEDetRequest0);
                        FECAEDetRequest0.put("Concepto", 1);
                        FECAEDetRequest0.put("DocTipo", 1);
                        FECAEDetRequest0.put("DocNro", 1);
                        FECAEDetRequest0.put("CbteDesde", 1);
                        FECAEDetRequest0.put("CbteHasta", 1);
                        FECAEDetRequest0.put("CbteFch", "string");
                        FECAEDetRequest0.put("ImpTotal", 1.5);
                        FECAEDetRequest0.put("ImpTotConc", 1.5);
                        FECAEDetRequest0.put("ImpNeto", 1.5);
                        FECAEDetRequest0.put("ImpOpEx", 1.5);
                        FECAEDetRequest0.put("ImpTrib", 1.5);
                        FECAEDetRequest0.put("ImpIVA", 1.5);
                        FECAEDetRequest0.put("FchServDesde", "string");
                        FECAEDetRequest0.put("FchServHasta", "string");
                        FECAEDetRequest0.put("FchVtoPago", "string");
                        FECAEDetRequest0.put("MonId", "string");
                        FECAEDetRequest0.put("MonCotiz", 1.5);
                        FECAEDetRequest0.put("CanMisMonExt", "string");
                        FECAEDetRequest0.put("CondicionIVAReceptorId", 1);
                        Map<String, Object> CbtesAsoc = new LinkedHashMap<>();
                        FECAEDetRequest0.put("CbtesAsoc", CbtesAsoc);
                            List<Object> CbteAsoc = new ArrayList<Object>();
                            CbtesAsoc.put("CbteAsoc", CbteAsoc);
                                Map<String, Object> CbteAsoc0 = new LinkedHashMap<>();
                                CbteAsoc.add(CbteAsoc0);
                                    CbteAsoc0.put("Tipo", 1);
                                    CbteAsoc0.put("PtoVta", 1);
                                    CbteAsoc0.put("Nro", 1);
                                    CbteAsoc0.put("Cuit", "string");
                                    CbteAsoc0.put("CbteFch", "string");
                        Map<String, Object> Tributos = new LinkedHashMap<>();
                        FECAEDetRequest0.put("Tributos", Tributos);
                            List<Object> Tributo = new ArrayList<Object>();
                            Tributos.put("Tributo", Tributo);
                                Map<String, Object> Tributo0 = new LinkedHashMap<>();
                                Tributo.add(Tributo0);
                                    Tributo0.put("Id", 1);
                                    Tributo0.put("Desc", "string");
                                    Tributo0.put("BaseImp", 1.5);
                                    Tributo0.put("Alic", 1.5);
                                    Tributo0.put("Importe", 1.5);
                        Map<String, Object> Iva = new LinkedHashMap<>();
                        FECAEDetRequest0.put("Iva", Iva);
                            List<Object> AlicIva = new ArrayList<Object>();
                            Iva.put("AlicIva", AlicIva);
                                Map<String, Object> AlicIva0 = new LinkedHashMap<>();
                                AlicIva.add(AlicIva0);
                                    AlicIva0.put("Id", 1);
                                    AlicIva0.put("BaseImp", 1.5);
                                    AlicIva0.put("Importe", 1.5);
                        Map<String, Object> Opcionales = new LinkedHashMap<>();
                        FECAEDetRequest0.put("Opcionales", Opcionales);
                            List<Object> Opcional = new ArrayList<Object>();
                            Opcionales.put("Opcional", Opcional);
                                Map<String, Object> Opcional0 = new LinkedHashMap<>();
                                Opcional.add(Opcional0);
                                    Opcional0.put("Id", "string");
                                    Opcional0.put("Valor", "string");
                        Map<String, Object> Compradores = new LinkedHashMap<>();
                        FECAEDetRequest0.put("Compradores", Compradores);
                            List<Object> Comprador = new ArrayList<Object>();
                            Compradores.put("Comprador", Comprador);
                                Map<String, Object> Comprador0 = new LinkedHashMap<>();
                                Comprador.add(Comprador0);
                                    Comprador0.put("DocTipo", 1);
                                    Comprador0.put("DocNro", 1);
                                    Comprador0.put("Porcentaje", 1.5);
                        Map<String, Object> PeriodoAsoc = new LinkedHashMap<>();
                        FECAEDetRequest0.put("PeriodoAsoc", PeriodoAsoc);
                            PeriodoAsoc.put("FchDesde", "string");
                            PeriodoAsoc.put("FchHasta", "string");
                        Map<String, Object> Actividades = new LinkedHashMap<>();
                        FECAEDetRequest0.put("Actividades", Actividades);
                            List<Object> Actividad = new ArrayList<Object>();
                            Actividades.put("Actividad", Actividad);
                                Map<String, Object> Actividad0 = new LinkedHashMap<>();
                                Actividad.add(Actividad0);
                                    Actividad0.put("Id", 1);

// Creamos un cliente HTTP para llamar a la API
HttpClient client = HttpClient.newBuilder()
    .connectTimeout(Duration.ofSeconds(20))
    .build();

// Realizamos la llamada a la API
Gson gson = new GsonBuilder().setPrettyPrinting().create();
String dataJSON = gson.toJson(data);

HttpRequest.Builder request = HttpRequest.newBuilder()
    .uri(new URI("https://app.afipsdk.com/api/v1/afip/requests"))
    .header("Content-Type", "application/json")
    .POST(HttpRequest.BodyPublishers.ofString(dataJSON));

// Reemplazar con tu access_token obtenido de https://app.afipsdk.com
String accessToken = "TU_TOKEN_AQUI";
request.header("Authorization", "Bearer "+ accessToken); 

HttpResponse<String> requestResponse = client.send(request.build(), HttpResponse.BodyHandlers.ofString());

// En caso de error lo mostramos por consola
if (requestResponse.statusCode() >= 400) {
    JsonElement errorResponse = gson.fromJson(requestResponse.body(), JsonElement.class);
    System.out.println("Error en la request: " + gson.toJson(errorResponse));

    return;
}

// Convertimos la respuesta en un objeto
JsonObject jsonObject = gson.fromJson(requestResponse.body(), JsonElement.class).getAsJsonObject();

// Mostramos la respuesta por consola
System.out.println(gson.toJson(jsonObject));
Respuesta
{
    "FECAESolicitarResult": {
        "FeCabResp": {
            "Cuit": "long",
            "PtoVta": "integer",
            "CbteTipo": "integer",
            "FchProceso": "string",
            "CantReg": "integer",
            "Resultado": "string",
            "Reproceso": "string"
        },
        "FeDetResp": {
            "FECAEDetResponse": [
                {
                    "Concepto": "integer",
                    "DocTipo": "integer",
                    "DocNro": "long",
                    "CbteDesde": "long",
                    "CbteHasta": "long",
                    "CbteFch": "string",
                    "Resultado": "string",
                    "Observaciones": {
                        "Obs": [
                            {
                                "Code": "integer",
                                "Msg": "string"
                            }
                        ]
                    },
                    "CAE": "string",
                    "CAEFchVto": "string"
                }
            ]
        },
        "Events": {
            "Evt": [
                {
                    "Code": "integer",
                    "Msg": "string"
                }
            ]
        },
        "Errors": {
            "Err": [
                {
                    "Code": "integer",
                    "Msg": "string"
                }
            ]
        }
    }
}