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://demoemision.thefactoryhka.com.pa/ws/obj/v1.0/Service.svc?wsdl

Usuario: “SOLICITAR”;

Password: “SOLICITAR”;

   public class EnviarDocumentoElectronico {


    // Se instancia los objetos utilizados

    String wsdl = "https://demoemision.thefactoryhka.com.pa/ws/obj/v1.0/Service.svc?wsdl";

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

Codigo Ejemplo + Librerias

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