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());
}
}