meta data de esta página
Diferencias
Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
lenguaje_php [2021/06/14 20:34] jsojo [PASO 2: CONSTRUIR EL DOCUMENTO ELECTRÓNICO A ENVIAR AL SERVICIO WEB DE INTEGRACIÓN DE TFHKA] |
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, |
// // | // // | ||
Línea 34: | Línea 34: | ||
$tokenPassword = " | $tokenPassword = " | ||
- | ==== 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 ===== |
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. | 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. | ||
Línea 74: | Línea 74: | ||
$factura-> | $factura-> | ||
- | - Ya teniendo listo el documento, es posible enviarlo al Servicio Web de Integración de TFHKA | + | - 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 | ||
+ | |||
+ | . "</ | ||
+ | |||
+ | < | ||
+ | |||
+ | < | ||
+ | |||
+ | <div class=' | ||
+ | |||
+ | < | ||
+ | |||
+ | < | ||
+ | |||
+ | < | ||
+ | |||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | <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 | ||
+ | |||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | |||
+ | ===== 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: | ||
+ | |||
+ | } | ||
+ | |||
+ | </ | ||
+ | </ | ||