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