meta data de esta página
¡Esta es una revisión vieja del documento!
Ejemplo en lenguaje JAVA
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;
PASO 1: Configurar la ruta de nuestro servicio web y tokens de prueba
Cuenta demo para hacer pruebas
LINK: http://demointegracion.ebi-pac.com/ws/obj/v1.0/Service.svc?singleWsdl
Usuario: “SOLICITAR”;
Password: “SOLICITAR”;
Se instancia los objetos utilizados
String wsdl = “http://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
PASO 2: Construir 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()); } }
PASO 3: Enviar el objeto documento electronico
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);
PASO 4: Obtener la respuesta de nuestro servicio web
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()); } }