Este código explica de manera sencilla como integrarse al servicio web de facturación electrónica
Pasos para realizar la integración:
PASO 1: Configurar la ruta de nuestro servicio web y tokens de prueba.
PASO 2: Construir el objeto documento electrónico.
PASO 3: Enviar el objeto documento electrónico a través del método enviar de nuestro servicio web.
PASO 4: Obtener la respuesta de nuestro servicio web.
package tf_pa_ejemplo_directo_java; public class Tf_Pa_ejemplo_directo_java { public static void main(String[] args) { EnviarDocumentoElectronico enviar; enviar = new EnviarDocumentoElectronico(); } }
package tf_pa_ejemplo_directo_java; //import java.awt.Desktop; import java.net.MalformedURLException; import java.net.URISyntaxException; import java.net.URL; import java.text.SimpleDateFormat; import java.util.Date; import javax.xml.ws.BindingProvider; import org.datacontract.schemas._2004._07.services.EnviarResponse; import org.datacontract.schemas._2004._07.services_objcomprobante.ObjectFactory; import org.datacontract.schemas._2004._07.services_objcomprobante.DocumentoElectronico; import org.datacontract.schemas._2004._07.services_objcomprobante.Cliente; import org.datacontract.schemas._2004._07.services_objcomprobante.DatosTransaccion; import org.datacontract.schemas._2004._07.services_objcomprobante.DocFiscalReferenciado; import org.datacontract.schemas._2004._07.services_objcomprobante.ListaDocsFiscalReferenciados; import org.datacontract.schemas._2004._07.services_objcomprobante.ListaItems; import org.datacontract.schemas._2004._07.services_objcomprobante.Item; import org.datacontract.schemas._2004._07.services_objcomprobante.TotalesSubTotales; import org.datacontract.schemas._2004._07.services_objcomprobante.ListaFormaPago; import org.datacontract.schemas._2004._07.services_objcomprobante.FormaPago; import org.datacontract.schemas._2004._07.services_objcomprobante.Retencion;
Cuenta demo para hacer pruebas
LINK: https://demointegracion.ebi-pac.com/ws/obj/v1.0/Service.svc?singleWsdl
Usuario: “SOLICITAR”;
Password: “SOLICITAR”;
public class EnviarDocumentoElectronico { // Se instancia los objetos utilizados String wsdl = "https://demointegracion.ebi-pac.com/ws/obj/v1.0/Service.svc?singleWsdl"; String tokenEmpresa = "SOLICITAR"; String tokenPassword = "SOLICITAR"; org.tempuri.Service service = new org.tempuri.Service(); org.tempuri.IService port = service.getBasicHttpBindingIService(); BindingProvider bindingProvider = (BindingProvider) port; DocumentoElectronico documentoElectronico = new DocumentoElectronico(); DatosTransaccion datosTransaccion = new DatosTransaccion(); Item item = new Item(); ObjectFactory factory = new ObjectFactory(); Date fechaHoy = new Date(); SimpleDateFormat fechaHoyFormat = new SimpleDateFormat("yyyy-MM-dd"+"'T'"+"HH:mm:ss"+"'-05:00'"); String fechaE = fechaHoyFormat.format(fechaHoy);
Este método construye el Objeto Documento Electrónico
El objeto documento electrónico contiene datos del cliente, transacción, ítem, totales etc.
private void buildDocumentoElectronico(){ try { //Datos Cliente en datosTransaccion Cliente cliente = new Cliente(); cliente.setTipoClienteFE(factory.createClienteTipoClienteFE("01")); //Contribuyente cliente.setTipoContribuyente(factory.createClienteTipoContribuyente("2")); //Juridico cliente.setNumeroRUC(factory.createClienteNumeroRUC("155596713-2-2015")); cliente.setDigitoVerificadorRUC(factory.createClienteDigitoVerificadorRUC("59")); cliente.setRazonSocial(factory.createClienteRazonSocial("Ambiente de pruebas")); cliente.setCodigoUbicacion(factory.createClienteCodigoUbicacion("1-2-3")); cliente.setDireccion(factory.createClienteDireccion("Ave. La Paz ")); cliente.setCorregimiento(factory.createClienteCorregimiento("GUABITO")); cliente.setDistrito(factory.createClienteDistrito("CHANGUINOLA")); cliente.setProvincia(factory.createClienteProvincia("BOCAS DEL TORO")); cliente.setTelefono1(factory.createClienteTelefono1("9999-9999")); cliente.setCorreoElectronico1(factory.createClienteCorreoElectronico1("sucursal000@empresa.com")); cliente.setPais(factory.createClientePais("PA")); // Panamá cliente.setNroIdentificacionExtranjero(factory.createClienteNroIdentificacionExtranjero(""));// Obligatorio si tipoCliente=04 cliente.setPaisExtranjero(factory.createClientePaisExtranjero(""));// Obligatorio si tipoCliente=04 datosTransaccion.setCliente(factory.createCliente(cliente)); //Datos DatosTransaccion en documentoElectronico datosTransaccion.setNumeroDocumentoFiscal(factory.createDatosTransaccionNumeroDocumentoFiscal("7011")); datosTransaccion.setTipoEmision(factory.createDatosTransaccionTipoEmision("01")); // Uso Previo-Normal datosTransaccion.setFechaInicioContingencia(factory.createDatosTransaccionFechaInicioContingencia("")); datosTransaccion.setMotivoContingencia(factory.createDatosTransaccionMotivoContingencia("")); datosTransaccion.setTipoDocumento(factory.createDatosTransaccionTipoDocumento("01"));// Factura Operación Inter. datosTransaccion.setPuntoFacturacionFiscal(factory.createDatosTransaccionPuntoFacturacionFiscal("002")); datosTransaccion.setFechaEmision(factory.createDatosTransaccionFechaEmision(this.fechaE)); // formato 2020-11-18T11:45:13-05:00 datosTransaccion.setFechaSalida(factory.createDatosTransaccionFechaSalida("")); datosTransaccion.setNaturalezaOperacion(factory.createDatosTransaccionNaturalezaOperacion("01")); //Venta datosTransaccion.setTipoOperacion(factory.createDatosTransaccionTipoOperacion("1")); //Salida o Venta datosTransaccion.setDestinoOperacion(factory.createDatosTransaccionDestinoOperacion("1")); //Panama datosTransaccion.setFormatoCAFE(factory.createDatosTransaccionFormatoCAFE("1")); //Sin Generación CAFE datosTransaccion.setEntregaCAFE(factory.createDatosTransaccionEntregaCAFE("1")); //Sin Generación CAFE datosTransaccion.setEnvioContenedor(factory.createDatosTransaccionEnvioContenedor("1")); //Normal datosTransaccion.setProcesoGeneracion(factory.createDatosTransaccionProcesoGeneracion("1")); //Por Sistema datosTransaccion.setTipoVenta(factory.createDatosTransaccionTipoVenta("1")); // Venta de Giro datosTransaccion.setInformacionInteres(factory.createDatosTransaccionInformacionInteres("Demo para Facturacion Electronica")); //Datos DocFiscalReferenciado en datosTransaccion ListaDocsFiscalReferenciados listaDocsFiscalReferenciados = new ListaDocsFiscalReferenciados(); DocFiscalReferenciado docFiscalReferenciado = new DocFiscalReferenciado(); docFiscalReferenciado.setCufeFEReferenciada(factory.createDocFiscalReferenciadoCufeFEReferenciada("")); docFiscalReferenciado.setFechaEmisionDocFiscalReferenciado(factory.createDocFiscalReferenciadoFechaEmisionDocFiscalReferenciado("")); listaDocsFiscalReferenciados.getDocFiscalReferenciado().add(null); datosTransaccion.setListaDocsFiscalReferenciados(factory.createListaDocsFiscalReferenciados(null)); documentoElectronico.setCodigoSucursalEmisor(factory.createDocumentoElectronicoCodigoSucursalEmisor("0000")); documentoElectronico.setTipoSucursal(factory.createDocumentoElectronicoTipoSucursal("")); documentoElectronico.setDatosTransaccion(factory.createDatosTransaccion(datosTransaccion)); //Datos Item en documentoElectronico ListaItems items = new ListaItems(); item.setDescripcion(factory.createItemDescripcion("Lapiz")); item.setCodigo(factory.createItemCodigo("CA-001")); item.setUnidadMedida(factory.createItemUnidadMedida("cm")); item.setCantidad(factory.createItemCantidad("2.00")); item.setFechaFabricacion(factory.createItemFechaFabricacion("")); item.setFechaCaducidad(factory.createItemFechaCaducidad("")); item.setInfoItem(factory.createItemInfoItem("Lapiz con Goma")); item.setPrecioUnitario(factory.createItemPrecioUnitario("69.000000")); item.setPrecioUnitarioDescuento(factory.createItemPrecioUnitarioDescuento("0.00")); item.setPrecioItem(factory.createItemPrecioItem("138.00")); item.setPrecioAcarreo(factory.createItemPrecioAcarreo("1.01")); item.setPrecioSeguro(factory.createItemPrecioSeguro("12.01")); item.setValorTotal(factory.createItemValorTotal("171.72")); item.setCodigoGTIN(factory.createItemCodigoGTIN("")); item.setCantGTINCom(factory.createItemCantGTINCom("")); item.setCodigoGTINInv(factory.createItemCodigoGTINInv("")); item.setCantGTINComInv(factory.createItemCantGTINComInv("")); item.setTasaITBMS(factory.createItemTasaITBMS("03")); item.setValorITBMS(factory.createItemValorITBMS("20.70")); item.setTasaISC(factory.createItemTasaISC("")); item.setValorISC(factory.createItemValorISC("")); item.setCodigoCPBS(factory.createItemCodigoCPBS("1410")); item.setUnidadMedidaCPBS(factory.createItemUnidadMedidaCPBS("cm")); items.getItem().add(0,item); documentoElectronico.setListaItems(factory.createListaItems(items)); //Datos TotalesSubTotales en documentoElectronico TotalesSubTotales totalesSubTotales = new TotalesSubTotales(); totalesSubTotales.setNroItems( factory.createTotalesSubTotalesNroItems("1")); totalesSubTotales.setTiempoPago(factory.createTotalesSubTotalesTiempoPago("1")); totalesSubTotales.setTotalAcarreoCobrado(factory.createTotalesSubTotalesTotalAcarreoCobrado("")); totalesSubTotales.setTotalDescuento(factory.createTotalesSubTotalesTotalDescuento("0.00")); totalesSubTotales.setTotalFactura(factory.createTotalesSubTotalesTotalFactura("171.72")); totalesSubTotales.setTotalISC(factory.createTotalesSubTotalesTotalISC("")); totalesSubTotales.setTotalITBMS(factory.createTotalesSubTotalesTotalITBMS("20.70")); totalesSubTotales.setTotalMontoGravado(factory.createTotalesSubTotalesTotalMontoGravado("20.70")); totalesSubTotales.setTotalPrecioNeto(factory.createTotalesSubTotalesTotalPrecioNeto("138.00")); totalesSubTotales.setTotalValorRecibido(factory.createTotalesSubTotalesTotalValorRecibido("171.72")); totalesSubTotales.setVuelto(factory.createTotalesSubTotalesVuelto("0.00")); totalesSubTotales.setValorSeguroCobrado(factory.createTotalesSubTotalesValorSeguroCobrado("")); totalesSubTotales.setTotalTodosItems(factory.createTotalesSubTotalesTotalTodosItems("171.72")); //Datos Entrada formaPago en totalesSubTotales FormaPago formaPago = new FormaPago(); ListaFormaPago listaFormaPago = new ListaFormaPago(); formaPago.setFormaPagoFact(factory.createFormaPagoFormaPagoFact("01")); // Credito formaPago.setValorCuotaPagada(factory.createFormaPagoValorCuotaPagada("171.72")); formaPago.setDescFormaPago(factory.createFormaPagoDescFormaPago("")); listaFormaPago.getFormaPago().add(0, formaPago); totalesSubTotales.setListaFormaPago(factory.createListaFormaPago(listaFormaPago)); //Datos Entrada retencion en totalesSubTotales Retencion retencion = new Retencion(); retencion.setCodigoRetencion(factory.createRetencionCodigoRetencion("8")); retencion.setMontoRetencion(factory.createRetencionMontoRetencion("1.00")); totalesSubTotales.setRetencion(factory.createRetencion(retencion)); documentoElectronico.setTotalesSubTotales(factory.createTotalesSubTotales(totalesSubTotales)); } catch (Exception e) { System.out.println("Exception :"+e.toString()); } }
Este Método permite enviar al servicio web el objeto documentoElectronico mediante el método enviar() parámetros :tokenEmpresa, tokenPassword, documentoElectronico y se obtiene como respuesta código, mensaje y respuesta del envío.
public EnviarDocumentoElectronico () { EnviarResponse enviarResponse; try { bindingProvider.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, wsdl); //Se Construye el objeto DocumentoElectronico buildDocumentoElectronico(); //Se envía DocumentoElectronico System.out.println("Enviando Documento Fiscal: "+datosTransaccion.getNumeroDocumentoFiscal().getValue()); //return port.enviar(tokenEmpresa, tokenPassword, documento); enviarResponse = port.enviar(tokenEmpresa, tokenPassword, documentoElectronico);
Recibirás una respuesta de nuestro servicio web, Se mostrara el código recibido con el mensaje y el código qr.
// Respuesta System.out.println("Respuesta: "+enviarResponse.getCodigo().getValue()+" - "+enviarResponse.getMensaje().getValue()); System.out.println("Cufe: "+enviarResponse.getCufe().getValue()); // link URL url = new URL(enviarResponse.getQr().getValue()); System.out.println(url.toURI()); //Desktop.getDesktop().browse(url.toURI()); } catch (MalformedURLException | URISyntaxException e) { System.out.println("Exception :"+e.toString()); } }