meta data de esta página
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
| lenguaje_php [2021/06/14 20:14] – jsojo | lenguaje_php [2022/08/29 19:34] (actual) – lmartinez | ||
|---|---|---|---|
| Línea 1: | Línea 1: | ||
| ====== Ejemplo en lenguaje PHP ====== | ====== 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 TFHKA a través del lenguaje de programación 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. | Lo más importante es establecer los pasos necesarios para realizar una integración exitosa. | ||
| Línea 7: | Línea 7: | ||
| Criterios a tomar en cuenta: | 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 TFHKA. | + | * 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 TFHKA. | + | * 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 TFHKA para su procesamiento. | + | * Enviar el documento al Servicio Web de Integración de EBI para su procesamiento. |
| - | * Recibir y procesar la respuesta del Servicio Web de TFHKA en nuestro proyecto, según sea requerido. | + | * Recibir y procesar la respuesta del Servicio Web de EBI en nuestro proyecto, según sea requerido. |
| Pasos para realizar la integración: | 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 TFHKA. | + | 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 TFHKA. | + | 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 TFHKA. | + | 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 TFHKA. | + | PASO 4: Recibir y procesar la Respuesta del Servicio Web de Integración de EBI . |
| **IMPORTANTE**: | **IMPORTANTE**: | ||
| - | Para mayor información y detalles sobre el proceso, puede consultar el Manual de Integración de TFHKA | + | 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 TFHKA ==== | + | ===== 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 TFHKA para enviar documentos electrónicos, | + | //A continuación definiremos la ruta y los TOKENS requeridos por el Servicio Web de Integración de EBI para enviar documentos electrónicos, |
| // // | // // | ||
| $tokenPassword = " | $tokenPassword = " | ||
| + | |||
| + | ===== 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 = " | ||
| + | |||
| + | Mensajero:: | ||
| + | |||
| + | $factura = new DocumentoElectronico(); | ||
| + | |||
| + | $cliente = new Cliente(); | ||
| + | |||
| + | $datos = new DatosTransaccion(); | ||
| + | |||
| + | $datos-> | ||
| + | |||
| + | - Debe establecerse el formato solicitado para la fecha de emisión " | ||
| + | |||
| + | $datos-> | ||
| + | |||
| + | $datos-> | ||
| + | |||
| + | $factura-> | ||
| + | |||
| + | $item = new Item(); | ||
| + | |||
| + | $factura-> | ||
| + | |||
| + | $totales = new Totales(); | ||
| + | |||
| + | $formaPago = new FormaPago(); | ||
| + | |||
| + | $totales-> | ||
| + | |||
| + | $factura-> | ||
| + | |||
| + | - 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, | ||
| + | |||
| + | <code -> | ||
| + | try { | ||
| + | $wsPa = new SoapClient($ruta); | ||
| + | $parametros = array( | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ); | ||
| + | |||
| + | - A continuación, | ||
| + | |||
| + | $respWsPa = json_decode(json_encode($wsPa-> | ||
| + | } 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: | ||
| + | |||
| + | Mensajero: | ||
| + | |||
| + | * DEFINICIÓN DE CLASES PARA ARMAR EL DOCUMENTO ELECTRÓNICO A ENVIAR, ASÍ COMO SUS ELEMENTOS COMPONENTES: | ||
| + | |||
| + | <code -> | ||
| + | class DocumentoElectronico | ||
| + | |||
| + | { | ||
| + | |||
| + | public $codigoSucursalEmisor | ||
| + | |||
| + | public $tipoSucursal = " | ||
| + | |||
| + | public $datosTransaccion; | ||
| + | |||
| + | public $listaItems; | ||
| + | |||
| + | public $totalesSubTotales; | ||
| + | |||
| + | } | ||
| + | |||
| + | class Cliente | ||
| + | |||
| + | { | ||
| + | |||
| + | public $tipoClienteFE = " | ||
| + | |||
| + | public $tipoContribuyente = " | ||
| + | |||
| + | public $numeroRUC = " | ||
| + | |||
| + | public $digitoVerificadorRUC = " | ||
| + | |||
| + | public $razonSocial = "FE general"; | ||
| + | |||
| + | public $direccion = "Av. Balboa"; | ||
| + | |||
| + | public $codigoUbicacion = " | ||
| + | |||
| + | public $corregimiento = " | ||
| + | |||
| + | public $distrito = " | ||
| + | |||
| + | public $provincia = "Bocas del Toro"; | ||
| + | |||
| + | public $telefono1 = " | ||
| + | |||
| + | public $telefono2 = ""; | ||
| + | |||
| + | public $telefono3 = ""; | ||
| + | |||
| + | public $correoElectronico1 = " | ||
| + | |||
| + | public $pais = " | ||
| + | |||
| + | public $paisOtro = ""; | ||
| + | |||
| + | } | ||
| + | |||
| + | class DatosTransaccion | ||
| + | |||
| + | { | ||
| + | |||
| + | public $tipoEmision = " | ||
| + | |||
| + | public $tipoDocumento = " | ||
| + | |||
| + | public $numeroDocumentoFiscal; | ||
| + | |||
| + | public $puntoFacturacionFiscal = " | ||
| + | |||
| + | public $fechaEmision; | ||
| + | |||
| + | public $naturalezaOperacion = " | ||
| + | |||
| + | public $tipoOperacion = " | ||
| + | |||
| + | public $destinoOperacion = " | ||
| + | |||
| + | public $formatoCAFE = " | ||
| + | |||
| + | public $entregaCAFE = " | ||
| + | |||
| + | public $envioContenedor = " | ||
| + | |||
| + | public $procesoGeneracion = " | ||
| + | |||
| + | public $tipoVenta = " | ||
| + | |||
| + | public $informacionInteres = " | ||
| + | |||
| + | public $cliente; | ||
| + | |||
| + | } | ||
| + | |||
| + | class Item | ||
| + | |||
| + | { | ||
| + | |||
| + | public $descripcion = " | ||
| + | |||
| + | public $codigo = " | ||
| + | |||
| + | public $unidadMedida = " | ||
| + | |||
| + | public $cantidad = " | ||
| + | |||
| + | public $fechaFabricacion = " | ||
| + | |||
| + | public $unidadMedidaCPBS = " | ||
| + | |||
| + | public $precioUnitario = " | ||
| + | |||
| + | public $precioUnitarioDescuento = " | ||
| + | |||
| + | public $precioAcarreo = " | ||
| + | |||
| + | public $precioSeguro = " | ||
| + | |||
| + | public $precioItem = " | ||
| + | |||
| + | public $valorTotal = " | ||
| + | |||
| + | public $codigoGTIN = " | ||
| + | |||
| + | public $cantGTINCom = " | ||
| + | |||
| + | public $codigoGTINInv = " | ||
| + | |||
| + | public $cantGTINComInv = " | ||
| + | |||
| + | public $tasaITBMS = " | ||
| + | |||
| + | public $valorITBMS = " | ||
| + | |||
| + | public $tasaISC = " | ||
| + | |||
| + | public $valorISC = " | ||
| + | |||
| + | public $codigoCPBS = " | ||
| + | |||
| + | } | ||
| + | |||
| + | class Totales | ||
| + | |||
| + | { | ||
| + | |||
| + | public $totalPrecioNeto = " | ||
| + | |||
| + | public $totalITBMS = " | ||
| + | |||
| + | public $totalISC = " | ||
| + | |||
| + | public $totalMontoGravado = " | ||
| + | |||
| + | public $totalDescuento = ""; | ||
| + | |||
| + | public $totalAcarreoCobrado = ""; | ||
| + | |||
| + | public $valorSeguroCobrado = ""; | ||
| + | |||
| + | public $totalFactura = " | ||
| + | |||
| + | public $totalValorRecibido = " | ||
| + | |||
| + | public $vuelto = " | ||
| + | |||
| + | public $tiempoPago = " | ||
| + | |||
| + | public $nroItems = " | ||
| + | |||
| + | public $totalTodosItems = " | ||
| + | |||
| + | public $listaFormaPago; | ||
| + | |||
| + | } | ||
| + | |||
| + | class FormaPago | ||
| + | |||
| + | { | ||
| + | |||
| + | public $formaPagoFact = " | ||
| + | |||
| + | public $valorCuotaPagada = " | ||
| + | |||
| + | public $descFormaPago = ""; | ||
| + | |||
| + | } | ||
| + | </ | ||
| + | |||
| + | ===== Definición de clases para mostrar información en el Front de esta pagina de ejemplo ===== | ||
| + | |||
| + | <code -> | ||
| + | class Mensajero | ||
| + | |||
| + | { | ||
| + | |||
| + | public static function Encabezado() | ||
| + | |||
| + | { | ||
| + | |||
| + | echo ("< | ||
| + | |||
| + | } | ||
| + | |||
| + | public static function InfoNumero($numero) | ||
| + | |||
| + | { | ||
| + | |||
| + | echo ("< | ||
| + | |||
| + | . $numero | ||
| + | |||
| + | . "</ | ||
| + | |||
| + | <br> | ||
| + | |||
| + | < | ||
| + | |||
| + | <div class=' | ||
| + | |||
| + | <ul> | ||
| + | |||
| + | < | ||
| + | |||
| + | < | ||
| + | |||
| + | </ul> | ||
| + | |||
| + | </ | ||
| + | |||
| + | <div class=' | ||
| + | |||
| + | <button onClick=' | ||
| + | |||
| + | </ | ||
| + | |||
| + | </ | ||
| + | |||
| + | } | ||
| + | |||
| + | public static function MostrarRespuesta($respWsPa) | ||
| + | |||
| + | { | ||
| + | |||
| + | echo " | ||
| + | |||
| + | < | ||
| + | |||
| + | <div class=' | ||
| + | |||
| + | <span class=' | ||
| + | |||
| + | < | ||
| + | |||
| + | <p class=' | ||
| + | |||
| + | < | ||
| + | |||
| + | . "< | ||
| + | |||
| + | < | ||
| + | |||
| + | . "< | ||
| + | |||
| + | < | ||
| + | |||
| + | . "< | ||
| + | |||
| + | < | ||
| + | |||
| + | . "</ | ||
| + | |||
| + | </ | ||
| + | |||
| + | </ | ||
| + | |||
| + | if ($respWsPa[" | ||
| + | |||
| + | echo " | ||
| + | |||
| + | < | ||
| + | |||
| + | <div class=' | ||
| + | |||
| + | <a href='" | ||
| + | |||
| + | . $respWsPa[" | ||
| + | |||
| + | . "' | ||
| + | |||
| + | Consultar Información | ||
| + | |||
| + | </a> | ||
| + | |||
| + | </ | ||
| + | |||
| + | </ | ||
| + | |||
| + | } | ||
| + | |||
| + | } | ||
| + | |||
| + | } | ||
| + | </ | ||
| + | |||
| + | ===== Definición de estilos CSS a utilizar en el Front de esta pagina de ejemplo ===== | ||
| + | |||
| + | <code -> | ||
| + | <style type=" | ||
| + | |||
| + | .texto2 { | ||
| + | |||
| + | color: #990000; | ||
| + | |||
| + | font-size: 1rem; | ||
| + | |||
| + | } | ||
| + | |||
| + | .texto3 { | ||
| + | |||
| + | color: #002d99; | ||
| + | |||
| + | font-size: 1.8rem; | ||
| + | |||
| + | padding-left: | ||
| + | |||
| + | } | ||
| + | |||
| + | .texto4 { | ||
| + | |||
| + | color: #d52d06; | ||
| + | |||
| + | font-size: 1.5rem; | ||
| + | |||
| + | padding-left: | ||
| + | |||
| + | } | ||
| + | |||
| + | .texto6 { | ||
| + | |||
| + | color: #fff; | ||
| + | |||
| + | font-size: 1.5rem; | ||
| + | |||
| + | padding-left: | ||
| + | |||
| + | } | ||
| + | |||
| + | .encabezado { | ||
| + | |||
| + | margin: 10 0 5px 0; | ||
| + | |||
| + | padding: 15px; | ||
| + | |||
| + | border-top: 1px solid #E9ECEF; | ||
| + | |||
| + | background: #5077a3; | ||
| + | |||
| + | background: -webkit-linear-gradient(to bottom right, rgb(2, 66, 179) 0%, rgb(0, 47, 134) 100%); | ||
| + | |||
| + | background: linear-gradient(to bottom right, rgb(2, 66, 179) 0%, rgb(0, 47, 134) 100%); | ||
| + | |||
| + | box-shadow: 0px 1px 3px -1px rgba(41, 70, 97, 0.2); | ||
| + | |||
| + | position: relative; | ||
| + | |||
| + | border-bottom: | ||
| + | |||
| + | color: #fff; | ||
| + | |||
| + | font-size: 1.9rem; | ||
| + | |||
| + | padding-left: | ||
| + | |||
| + | } | ||
| + | |||
| + | .encabezado2 { | ||
| + | |||
| + | width: 60%; | ||
| + | |||
| + | margin-top: 20px; | ||
| + | |||
| + | border: 2px solid #c8dbff; | ||
| + | |||
| + | background-color: | ||
| + | |||
| + | position: relative; | ||
| + | |||
| + | color: #002d99; | ||
| + | |||
| + | font-size: 1rem; | ||
| + | |||
| + | border-radius: | ||
| + | |||
| + | padding: 5px; | ||
| + | |||
| + | line-height: | ||
| + | |||
| + | text-align: left; | ||
| + | |||
| + | text-indent: | ||
| + | |||
| + | } | ||
| + | |||
| + | .encabezado3 { | ||
| + | |||
| + | width: 100% margin-top: 10px; | ||
| + | |||
| + | background-color: | ||
| + | |||
| + | position: relative; | ||
| + | |||
| + | color: #002d99; | ||
| + | |||
| + | font-size: 1rem; | ||
| + | |||
| + | border-radius: | ||
| + | |||
| + | padding: 5px; | ||
| + | |||
| + | line-height: | ||
| + | |||
| + | text-align: left; | ||
| + | |||
| + | padding-left: | ||
| + | |||
| + | } | ||
| + | |||
| + | .encabezado4 { | ||
| + | |||
| + | width: 60%; | ||
| + | |||
| + | margin-top: 20px; | ||
| + | |||
| + | border: 2px solid #c8dbff; | ||
| + | |||
| + | border-radius: | ||
| + | |||
| + | } | ||
| + | |||
| + | .encabezado5 { | ||
| + | |||
| + | width: 60%; | ||
| + | |||
| + | margin-top: 50px; | ||
| + | |||
| + | border: 2px solid #c8dbff; | ||
| + | |||
| + | border-radius: | ||
| + | |||
| + | } | ||
| + | |||
| + | .encabezado6 { | ||
| + | |||
| + | margin: 10 0 30px 0; | ||
| + | |||
| + | padding: 0 30px; | ||
| + | |||
| + | border-top: 1px solid #c8dbff; | ||
| + | |||
| + | background-color: | ||
| + | |||
| + | box-shadow: 0px 1px 3px -1px rgba(41, 70, 97, 0.2); | ||
| + | |||
| + | position: relative; | ||
| + | |||
| + | border-bottom: | ||
| + | |||
| + | color: #990000; | ||
| + | |||
| + | font-size: 1.6rem; | ||
| + | |||
| + | text-indent: | ||
| + | |||
| + | } | ||
| + | |||
| + | ul { | ||
| + | |||
| + | list-style: none; | ||
| + | |||
| + | } | ||
| + | |||
| + | li { | ||
| + | |||
| + | margin: 0px 0px 1px 0px; | ||
| + | |||
| + | } | ||
| + | |||
| + | button { | ||
| + | |||
| + | position: relative; | ||
| + | |||
| + | display: inline-block; | ||
| + | |||
| + | padding: 8px 10px; | ||
| + | |||
| + | background-image: | ||
| + | |||
| + | background-image: | ||
| + | |||
| + | text-decoration: | ||
| + | |||
| + | color: #fff; | ||
| + | |||
| + | font-size: 15px; | ||
| + | |||
| + | font-family: | ||
| + | |||
| + | font-weight: | ||
| + | |||
| + | border-radius: | ||
| + | |||
| + | float: right; | ||
| + | |||
| + | } | ||
| + | |||
| + | button: | ||
| + | |||
| + | background: -webkit-linear-gradient(to bottom right, rgb(1, 85, 232) 0%, rgb(0, 81, 232) 100%); | ||
| + | |||
| + | background: linear-gradient(to bottom right, rgb(1, 85, 232) 0%, rgb(0, 81, 232) 100%); | ||
| + | |||
| + | color: #fff; | ||
| + | |||
| + | } | ||
| + | |||
| + | a { | ||
| + | |||
| + | position: relative; | ||
| + | |||
| + | display: inline-block; | ||
| + | |||
| + | padding: 8px 10px; | ||
| + | |||
| + | background-image: | ||
| + | |||
| + | background-image: | ||
| + | |||
| + | text-decoration: | ||
| + | |||
| + | color: #fff; | ||
| + | |||
| + | font-size: 15px; | ||
| + | |||
| + | font-family: | ||
| + | |||
| + | font-weight: | ||
| + | |||
| + | border-radius: | ||
| + | |||
| + | float: right; | ||
| + | |||
| + | } | ||
| + | |||
| + | a:hover { | ||
| + | |||
| + | background: -webkit-linear-gradient(to bottom right, rgb(1, 85, 232) 0%, rgb(0, 81, 232) 100%); | ||
| + | |||
| + | background: linear-gradient(to bottom right, rgb(1, 85, 232) 0%, rgb(0, 81, 232) 100%); | ||
| + | |||
| + | color: #fff; | ||
| + | |||
| + | } | ||
| + | |||
| + | hr { | ||
| + | |||
| + | border: 2px solid #c8dbff; | ||
| + | |||
| + | background-color: | ||
| + | |||
| + | } | ||
| + | |||
| + | </ | ||
| + | </ | ||