====== Ejemplo en lenguaje PHP ====== Tiene como objetivo ejemplificar el proceso de conexión, acceso y uso de las propiedades y métodos ofrecidos por el Servicio Web de Integración de EBI a través del lenguaje de programación PHP Lo más importante es establecer los pasos necesarios para realizar una integración exitosa. Criterios a tomar en cuenta: * Establecer ruta y Tokens para conectarnos y utilizar los métodos expuestos por el Servicio Web de Integración de EBI . * Construir / Armar el objeto Documento Electrónico (Factura) que se desea enviar al Servicio Web de Integración de EBI . * Enviar el documento al Servicio Web de Integración de EBI para su procesamiento. * Recibir y procesar la respuesta del Servicio Web de EBI en nuestro proyecto, según sea requerido. Pasos para realizar la integración: PASO 1: Definir variables con la ruta y los tokens requeridos por el Servicio Web de Integración de EBI . PASO 2: Construir el Documento Electrónico a enviar al Servicio Web de Integración de EBI . PASO 3: Enviar el Documento Electrónico construido en el paso 3 al Servicio Web de Integración de EBI . PASO 4: Recibir y procesar la Respuesta del Servicio Web de Integración de EBI . **IMPORTANTE**: El Documento procesado será almacenado en la NUBE para que pueda ser consultado en cualquier momento. Para mayor información y detalles sobre el proceso, puede consultar el **Manual de Integración de EBI ** ===== PASO 1: Definir variables con la ruta y los tokens requerido por el servicio web de EBI ===== //A continuación definiremos la ruta y los TOKENS requeridos por el Servicio Web de Integración de EBI para enviar documentos electrónicos, así como para utilizar otros métodos públicos expuestos $ruta = "[[https://demointegracion.ebi-pac.com/ws/obj/v1.0/Service.svc?singleWsdl]]"; //url del servicio // // // //$tokenEmpresa = "SOLICITAR"; // // $tokenPassword = "SOLICITAR"; ===== PASO 2: Construir el documento electrónico a enviar al servicio web de integración de EBI ===== En este ejemplo utilizaremos Clases, Atributos y Métodos creados con la finalidad de organizar mejor la estructura del archivo y del cuerpo de código fuente en general. Sin embargo, esta estructura no es obligatoria. El desarrollador puede utilizar su propio estilo, siempre y cuando logre establecer los valores requeridos para los diferentes objetos que sub-componen al objeto DocumentoElectrónico a enviar al Servicio Web. A continuación se define una variable para establecer el Número de Documento Electrónico a enviar $numeroDocFiscal = "0000000000"; Mensajero::InfoNumero($numeroDocFiscal); $factura = new DocumentoElectronico(); $cliente = new Cliente(); $datos = new DatosTransaccion(); $datos->cliente = $cliente; - Debe establecerse el formato solicitado para la fecha de emisión "yyyy-MM-ddTHH:mm:ss-05:00" $datos->fechaEmision = (new \DateTime('America/Panama'))->format('Y-m-d\TH:i:s-05:00'); $datos->numeroDocumentoFiscal = $numeroDocFiscal; $factura->datosTransaccion = $datos; $item = new Item(); $factura->listaItems = array($item); $totales = new Totales(); $formaPago = new FormaPago(); $totales->listaFormaPago = array($formaPago); $factura->totalesSubTotales = $totales; - Ya teniendo listo el documento, es posible enviarlo al Servicio Web de Integración de EBI ===== PASO 3: Enviar el documento electrónico construido en el paso 3 al servicio web de integración de EBI ===== A continuación definiremos la ruta y los TOKENS requeridos por el Servicio Web de Integración de EBI para enviar documentos electrónicos, así como para utilizar otros métodos públicos expuestos. try { $wsPa = new SoapClient($ruta); $parametros = array( 'tokenEmpresa' => $tokenEmpresa, 'tokenPassword' => $tokenPassword, 'documento' => $factura, ); - A continuación, enviamos el documento al método "Enviar" del Servicio Web de Integración de EBI $respWsPa = json_decode(json_encode($wsPa->__soapCall('Enviar', array($parametros))), true); } catch (\Exception $e) { die($e); } ===== PASO 4: Recibir y procesar la respuesta del servicio web de integración de EBI ===== La respuesta del Servicio Web de EBIserá enviada inmediatamente. En este ejemplo, la respuesta del Servicio Web se muestra directamente a través de la pantalla. En caso de recibir una respuesta positiva para el envío del Documento Electrónico (código 200), se presentará un enlace para observar los detalles a través de la página de Consulta de Facturas por Qr en una pestaña adicional de su navegador web. La respuesta del Servicio Web de EBI incluye: código de la respuesta, resultado, mensaje, cufe y Qr, entre otros. Para mayor detalle de la respuesta del Servicio Web, podría visualizar el resultado a través de la siguiente instrucción: var_dump($respWsPa["EnviarResult"]); Mensajero:MostrarRespuesta($respWsPa); * DEFINICIÓN DE CLASES PARA ARMAR EL DOCUMENTO ELECTRÓNICO A ENVIAR, ASÍ COMO SUS ELEMENTOS COMPONENTES: class DocumentoElectronico { public $codigoSucursalEmisor = "0000"; public $tipoSucursal = "1"; public $datosTransaccion; public $listaItems; public $totalesSubTotales; } class Cliente { public $tipoClienteFE = "01"; public $tipoContribuyente = "2"; public $numeroRUC = "155596713-2-2015"; public $digitoVerificadorRUC = "59"; public $razonSocial = "FE general"; public $direccion = "Av. Balboa"; public $codigoUbicacion = "1-2-3"; public $corregimiento = "Guabito"; public $distrito = "Changuinola"; public $provincia = "Bocas del Toro"; public $telefono1 = "997-8243"; public $telefono2 = ""; public $telefono3 = ""; public $correoElectronico1 = "fep@gmail.com"; public $pais = "PA"; public $paisOtro = ""; } class DatosTransaccion { public $tipoEmision = "01"; public $tipoDocumento = "01"; public $numeroDocumentoFiscal; public $puntoFacturacionFiscal = "001"; public $fechaEmision; public $naturalezaOperacion = "01"; public $tipoOperacion = "1"; public $destinoOperacion = "1"; public $formatoCAFE = "1"; public $entregaCAFE = "1"; public $envioContenedor = "1"; public $procesoGeneracion = "1"; public $tipoVenta = "1"; public $informacionInteres = "Prueba de Información de interés"; public $cliente; } class Item { public $descripcion = "Cuadernos"; public $codigo = "T"; public $unidadMedida = "und"; public $cantidad = "2.00"; public $fechaFabricacion = "2020-12-25"; public $unidadMedidaCPBS = "cm"; public $precioUnitario = "69.00"; public $precioUnitarioDescuento = "0.00"; public $precioAcarreo = "1.01"; public $precioSeguro = "12.01"; public $precioItem = "138.00"; public $valorTotal = "171.72"; public $codigoGTIN = "0"; public $cantGTINCom = "0.99"; public $codigoGTINInv = "0"; public $cantGTINComInv = "1.00"; public $tasaITBMS = "03"; public $valorITBMS = "20.70"; public $tasaISC = "0.00"; public $valorISC = "0.00"; public $codigoCPBS = "1410"; } class Totales { public $totalPrecioNeto = "138.00"; public $totalITBMS = "20.70"; public $totalISC = "0.00"; public $totalMontoGravado = "20.70"; public $totalDescuento = ""; public $totalAcarreoCobrado = ""; public $valorSeguroCobrado = ""; public $totalFactura = "171.72"; public $totalValorRecibido = "171.72"; public $vuelto = "0.00"; public $tiempoPago = "1"; public $nroItems = "1"; public $totalTodosItems = "171.72"; public $listaFormaPago; } class FormaPago { public $formaPagoFact = "02"; public $valorCuotaPagada = "171.72"; public $descFormaPago = ""; } ===== Definición de clases para mostrar información en el Front de esta pagina de ejemplo ===== class Mensajero { public static function Encabezado() { echo ("
Electronic Business Intelligence
EJEMPLO DE INTEGRACIÓN DIRECTA PHP (v7 o superior)
"); } public static function InfoNumero($numero) { echo ("Número de Documento Fiscal a enviar:" . $numero . "
  • Puede cambiar el Número de Documento Fiscal a enviar en la línea 67 del código fuente de esta página.
  • Guarde el cambio realizado y haga Click en el siguiente botón para actualizar y enviar nuevamente.
"); } public static function MostrarRespuesta($respWsPa) { echo "
RESULTADOS

CÓDIGO: " . $respWsPa["EnviarResult"]['codigo'] . "
RESULTADO: " . $respWsPa["EnviarResult"]['resultado'] . "
MENSAJE: " . $respWsPa["EnviarResult"]['mensaje'] . "
CUFE: " . $respWsPa["EnviarResult"]['cufe'] . "

"; if ($respWsPa["EnviarResult"]['codigo'] == "200" || $respWsPa["EnviarResult"]['codigo'] == "102") { echo "
"; } } }
===== Definición de estilos CSS a utilizar en el Front de esta pagina de ejemplo =====