Factura Electrónica
Ejemplo de Nota de Débito B con Java
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", "{{token}}");
Auth.put("Sign", "{{sign}}");
Auth.put("Cuit", "{{cuit}}");
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", 7);
Map<String, Object> FeDetReq = new LinkedHashMap<>();
FeCAEReq.put("FeDetReq", FeDetReq);
Map<String, Object> FECAEDetRequest = new LinkedHashMap<>();
FeDetReq.put("FECAEDetRequest", FECAEDetRequest);
FECAEDetRequest.put("Concepto", 1);
FECAEDetRequest.put("DocTipo", 99);
FECAEDetRequest.put("DocNro", 0);
FECAEDetRequest.put("CbteDesde", 15);
FECAEDetRequest.put("CbteHasta", 15);
FECAEDetRequest.put("CbteFch", 20240314);
FECAEDetRequest.put("FchServDesde", null);
FECAEDetRequest.put("FchServHasta", null);
FECAEDetRequest.put("FchVtoPago", null);
FECAEDetRequest.put("ImpTotal", 121);
FECAEDetRequest.put("ImpTotConc", 0);
FECAEDetRequest.put("ImpNeto", 100);
FECAEDetRequest.put("ImpOpEx", 0);
FECAEDetRequest.put("ImpIVA", 21);
FECAEDetRequest.put("ImpTrib", 0);
FECAEDetRequest.put("MonId", "PES");
FECAEDetRequest.put("MonCotiz", 1);
FECAEDetRequest.put("CondicionIVAReceptorId", 5);
Map<String, Object> CbtesAsoc = new LinkedHashMap<>();
FECAEDetRequest.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", 6);
CbteAsoc0.put("PtoVta", 1);
CbteAsoc0.put("Nro", 1);
Map<String, Object> Iva = new LinkedHashMap<>();
FECAEDetRequest.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", 5);
AlicIva0.put("BaseImp", 100);
AlicIva0.put("Importe", 21);
// 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"
}
]
}
}
}