Enviar XML
Este tutorial sirve para enviar los siguientes comprobantes de pago:
- Factura, Boleta
- Notas de crédito y débito
- Bajas y resúmenes diarios
- Percepciones y retenciones
- Guias de remision
Configura URLs y credenciales
CompanyURLs companyURLs = CompanyURLs.builder()
.invoice("https://e-beta.sunat.gob.pe/ol-ti-itcpfegem-beta/billService")
.perceptionRetention("https://e-beta.sunat.gob.pe/ol-ti-itemision-otroscpe-gem-beta/billService")
.despatch("https://api-cpe.sunat.gob.pe/v1/contribuyente/gem")
.build();
CompanyCredentials credentials = CompanyCredentials.builder()
.username("12345678959MODDATOS")
.password("MODDATOS")
.token("accessTokenParaGuiasDeRemision")
.build();
info
XSender soporta el envío de guias de remisión. El token
descrito en la clase CompanyCredentials
representa el access token para el envio de guias de remisión. Lee Obtener access token
Analiza el XML que deseas enviar
Path miXML = Paths.get("/home/mi_archivo_xml"); // El XML puede ser "Path, InputStream, o bytes[]"
BillServiceFileAnalyzer fileAnalyzer = new BillServiceXMLFileAnalyzer(miXML, companyURLs);
// Archivo ZIP
ZipFile zipFile = fileAnalyzer.getZipFile();
// Configuración para enviar xml y Configuración para consultar ticket
BillServiceDestination fileDestination = fileAnalyzer.getSendFileDestination();
BillServiceDestination ticketDestination = fileAnalyzer.getVerifyTicketDestination();
Enviar XML
CamelContext camelContext = StandaloneCamel.getInstance()
.getMainCamel()
.getCamelContext();
CamelData camelData = CamelUtils.getBillServiceCamelData(zipFile, fileDestination, credentials);
SunatResponse sendFileSunatResponse = camelContext.createProducerTemplate()
.requestBodyAndHeaders(
Constants.XSENDER_BILL_SERVICE_URI,
camelData.getBody(),
camelData.getHeaders(),
SunatResponse.class
);
Consultar Ticket
Si enviaste una baja, resumen diario, o guia de remisión, entonces puedes consultar el estado de tu ticket.
String ticket = sendFileSunatResponse.getSunat().getTicket();
CamelData camelTicketData = CamelUtils.getBillServiceCamelData(ticket, ticketDestination, credentials);
SunatResponse verifyTicketSunatResponse = camelContext.createProducerTemplate()
.requestBodyAndHeaders(
Constants.XSENDER_BILL_SERVICE_URI,
camelTicketData.getBody(),
camelTicketData.getHeaders(),
SunatResponse.class
);
Obtener access token para el envío de guias de remisión
// Access token creado anteriormente (NULL si es la primera vez que generas el token).
// Si el token previo expiró entonces se genera uno nuevo.
// Si el token no expiró se devuelve el token previo.
ResponseAccessTokenSuccessDto prevToken = null;
String clientId = "myClientId";
Map<String, Object> headers = Map.of(
HttpConstants.HTTP_URI, "https://api-cpe.sunat.gob.pe",
HttpConstants.HTTP_PATH, "/v1/clientessol/" + clientId + "/oauth2/token/"
);
Object body = List.of(prevToken, Map.of(
"grant_type", "password",
"scope", "https://api-cpe.sunat.gob.pe",
"client_id", clientId,
"client_secret", "mySecret",
"username", "12345678959MODDATOS",
"password", "MODDATOS"
));
ResponseAccessTokenSuccessDto newToken = camelContext.createProducerTemplate()
.requestBodyAndHeaders(Constants.XSENDER_CREDENTIALS_API_URI, body, headers, ResponseAccessTokenSuccessDto.class);