Timbrado de texto, archivos TXT, web service

Timbra archivos de texto

Timbrado por texto, es un componente que puedes incluir en tu proyecto y llamarlo mediante parámetros de texto con la información de los comprobantes a generar, el web service ya incluye los métodos necesarios para integrar el proceso de Timbrado de CFDI's.

Requisitos

Requisitos para timbrar archivos xml

  • Tener un programador o área de sistemas que implemente la conexión (para el caso de desear conectarse por webservice)
  • ERP propio con posibilidad de actualizarlo y que genere sus propios archivos XML v. 4.0 válidos de acuerdo al anexo 20.
  • Tener los certificados de sello digital CSD de los emisores para subirlos al sistema, en caso de desear subir su información y timbrarla directamente desde nuestra página.
¿Para qué sirve?

¿Para qué sirve el timbrado?

Con el timbrado de facturaselectronicascfdi.com podrás certificar y dar legalidad/validez fiscal a tus documentos. Tus archivos de texto son enviados mediante conexión remota o puedes subirlos a nuestra web, y si pasan la validación, son convertidos a xml y se timbran/certifican agregandole el nodo timbre al xml, mismo que te es devuelto de forma instantánea.

A quién está orientado
  • A personas o empresas que puedan crear/estructurar archivos de texto de acuerdo a nuestro layout/especificaciones
  • A desarrolladores de software, integradores, programadores, que deseen agregar facturación electrónica certificada a su software

Ejemplos de archivos de texto para timbrar

Factura

Factura 4.0 descripción de la cadena

DOCUMENTO|Factura|ENVIO|nombre|Correo|COMPROBANTE|version|serie|folio|fecha|formaPago|subtotal|descuento|moneda|tipocambio|total|tipocomprobante|exportacion|metodopago|lugardeexpedicion|confirmacion|condicionesdepago|INFORMACION_GLOBAL|periodicidad|meses|año|CFDI_RELACIONADOS|uuid|CFDI_RELACION|tiporelacion|EMISOR|rfc|nombre|regimenfiscal|facactradquirente|RECEPTOR|rfc|nombre|domiciliofiscalreceptor|recidenciafiscal|NumRegIdTrib|regimenfiscalreceptor|UsoCFDI|CONCEPTO|ClaveProdServ|NoIdentificacion|Cantidad|ClaveUnidad|Unidad|Descripcion|ValorUnitario|Importe|Descuento|ObjetoImp|C_IMP_TRASLADADO|base|impuesto|tipofactor|tasaocuota|importe|C_IMP_RETENIDO|base|impuesto|tipofactor|tasaocuota|importe |IMPUESTOSTOTALES|TotalImpuestosTrasladado|TotalImpuestosRetenido|IMPUESTOSCOMPROBANTE|IMP_TRASLADADO|base|impuesto|importe|TasaOCuota|TipoFactor|IMP_RETENIDO|Impuesto|Importe

Factura 4.0 ejemplo de la cadena

DOCUMENTO|Factura|COMPROBANTE|4.0|R|145740|2023-05-31T16:07:09|03|941.18||MXN||1181.1|I|01|PUE|64900|||EMISOR|KIJ0906199R1|KERNEL INDUSTIA JUGUETERA|601||RECEPTOR|XAXX010101000|PÚBLICO EN GENERAL|64900|||616|S01|CONCEPTO|84101700||1|E48||AF-20097 29/36 21/01/2023 - RENTA / MENSUALIDAD Capital: 4466.71 Interes: 813.68|813.68|813.68||02|C_IMP_TRASLADADO|1372|002|Tasa|0.160000|219.52|CONCEPTO|84101700||1|E48||AF-20097 29/36 29/01/2023 - MORATORIOS.|127.5|127.5||02|C_IMP_TRASLADADO|127.5|002|Tasa|0.160000|20.4|IMPUESTOSTOTALES|239.92||IMPUESTOSCOMPROBANTE|IMP_TRASLADADO|1499.5|002|239.92|0.160000|Tasa|ADDENDA|ARFINSA|CFD|2792|03 SPEI dir bmer 1 feb ||4466.71|813.68|5647.81|OBSERVACIONES|OBSERVACION||OBSERVACION|En cumplimiento al artículo 32 de la Ley del Impuesto al Valor Agregado, se manifiesta que este acto consiste en un pago parcial que corresponde a la operación contenida en la factura de fecha 01/09/2020.|

Recepción de pagos

'Recepción de pagos descripción de la cadena

DOCUMENTO|Factura|ENVIO|nombre|Correo|COMPROBANTE|version|serie|folio|fecha|formaPago|subtotal|descuento|moneda|tipocambio|total|tipocomprobante|exportacion|metodopago|lugardeexpedicion|confirmacion|condicionesdepago|CFDI_RELACIONADOS|uuid|CFDI_RELACION|tiporelacion|EMISOR|rfc|nombre|regimenfiscal|facactradquirente|RECEPTOR|rfc|nombre|domiciliofiscalreceptor|recidenciafiscal|NumRegIdTrib|regimenfiscalreceptor|UsoCFDI|CONCEPTO|ClaveProdServ|NoIdentificacion|Cantidad|ClaveUnidad|Unidad|Descripcion|ValorUnitario|Importe|Descuento|ObjetoImp|C_IMP_TRASLADADO|base|impuesto|tipofactor|tasaocuota|importe|C_IMP_RETENIDO|base|impuesto|tipofactor|tasaocuota|importe |IMPUESTOSTOTALES|TotalImpuestosTrasladado|TotalImpuestosRetenido|IMPUESTOSCOMPROBANTE|IMP_TRASLADADO|base|impuesto|importe|TasaOCuota|TipoFactor|IMP_RETENIDO|Impuesto|Importe|COMPLEMENTO| PAGOS|version|PAGO|FechaPago|FormaDePagoP|MonedaP|tipocambio|Monto|NumOperacion|CUENTA_ORIGEN|RfcEmisorCtaOrd|NomBancoOrdExt|CtaOrdenante|CUENTA_DESTINO|RfcEmisorCtaBen|CtaBeneficiario|TIPO_CAD_PAGO|TipoCadPago|CertPago|CadPago|SelloPago|DOC_RELACIONADO|IdDocumento|Serie|Folio|MonedaDR|EquivalenciaDR|NumParcialidad|ImpSaldoAnt|ImpPagado|ImpSaldoInsoluto|ObjetoImpDR|IMPUESTOSDR|RETENCIONESDR|RETENCIONDR|BaseDR|ImpuestoDR|TipoFactorDR|TasaOCuotaDR|ImporteDR|TRASLADOSDR|TRASLADODR|BaseDR|ImpuestoDR|TipoFactorDR|TasaOCuotaDR|ImporteDR|IMPUESTOSP|RETENCIONESP|RETENCIONP|ImpuestoP|ImporteP|TRASLADOSP|TRASLADOP|BaseP|ImpuestoP|TipoFactorP|TasaOCuotaP|ImporteP|TOTALES|TotalRetencionesIVA|TotalRetencionesISR|TotalRetencionesIEPS|TotalTrasladosBaseIVA16|TotalTrasladosImpuestoIVA16|TotalTrasladosBaseIVA8|TotalTrasladosImpuestoIVA8|TotalTrasladosBaseIVA0|TotalTrasladosImpuestoIVA0|TotalTrasladosBaseIVAExento|MontoTotalPagos|

'Recepción de pagos ejemplo de la cadena

DOCUMENTO|Factura|COMPROBANTE|4.0|P-Pruebas|1|2022-12-14T13:59:17||0||XXX||0|P|01||83420|||EMISOR|KIJ0906199R1|KERNEL INDUSTIA JUGUETERA|601||RECEPTOR|COPJ7809196S2|JOB JOSUE CONSTANTINO PRADO|58230|||606|CP01|CONCEPTO|84111506||1|ACT||Pago|0|0||01|COMPLEMENTO|PAGOS|2.0|PAGO|2022-12-14T13:59:17|01|MXN|1|1.00|1|DOC_RELACIONADO|BFE19B16-3477-4EC3-B83A-CE0D10F12726||34|MXN|1|1|23|1.00|22.00|01|TOTALES|||||||||||1.00|

Nómina

'Nomina descripcion de la cadena

DOCUMENTO|Factura|ENVIO|nombre|Correo|COMPROBANTE|version|serie|folio|fecha|formaPago|subtotal|descuento|moneda|tipocambio|total|tipocomprobante|exportacion|metodopago|lugardeexpedicion|confirmacion|condicionesdepago|CFDI_RELACIONADOS|uuid|CFDI_RELACION|tiporelacion|EMISOR|rfc|nombre|regimenfiscal|facactradquirente|RECEPTOR|rfc|nombre|domiciliofiscalreceptor|recidenciafiscal|NumRegIdTrib|regimenfiscalreceptor|UsoCFDI|CONCEPTO|ClaveProdServ|NoIdentificacion|Cantidad|ClaveUnidad|Unidad|Descripcion|ValorUnitario|Importe|Descuento| ObjetoImp| COMPLEMENTO |NOMINA |Version|TipoNomina|FechaPago|FechaInicialPago|FechaFinalPago|NumDiasPagados|TotalPercepciones|TotalDeducciones|TotalOtrosPagos|EMISOR|ENTIDADSNCF|OrigenRecurso|MontoRecursoPropio|Curp|RegistroPatronal|RfcPatronOrigen|RECEPTOR|SUBCONTRATACION|rfclabora|porcentaTiempo|Curp|NumSeguridadSocial|FechaInicioRelLaboral|Antigüedad|TipoContrato|Sindicalizado|TipoJornada|TipoRegimen|NumEmpleado|Departamento|Puesto|RiesgoPuesto|PeriodicidadPago|Banco|CuentaBancaria|SalarioBaseCotApor|SalarioDiarioIntegrado|ClaveEntFed|PERCEPCIONES|TotalSueldos|TotalSeparacionIndemnizacion|TotalJubilacionPensionRetiro|TotalGravado|TotalExento|PERCEPCION|ACCIONESOTITULOS|ValorMercado|PrecioAlOtorgarse|HORASEXTRA|Dias|TipoHoras|HorasExtra|ImportePagado|TipoPercepcion|Clave|Concepto|ImporteGravado|ImporteExento|JUBILACIONPENSIONRETIRO|TotalUnaExhibicion|TotalParcialidad|MontoDiario|IngresoAcumulable|IngresoNoAcumulable|SEPARACIONINDEMNIZACION|TotalPagado|NumAñosServicioUltimoSueldoMensOrd|IngresoAcumulable|IngresoNoAcumulable|DEDUCCIONES|TotalOtrasDeducciones|TotalImpuestosRetenidos|DEDUCCION|TipoDeduccion|Clave|Concepto|Importe|OTROSPAGOS|OTROPAGO|TipoOtroPago|Clave|Concepto|Importe|SUBSIDIOALEMPLEO|SubsidioCausado|COMPENSACIONSALDOSAFAVOR|SaldoAFavor|Año|RemanenteSalFav|INCAPACIDADES|INCAPACIDAD|DiasIncapacidad|TipoIncapacidad|ImporteMonetario|

Nomina ejemplo de la cadena

DOCUMENTO|Nomina|COMPROBANTE|4.0|A|16|2022-03-25T10:02:24||1002.00||MXN||1002.00|N|01|PUE|61600|||EMISOR|KIJ0906199R1|KERNEL INDUSTIAJUGUETERA|601||RECEPTOR|*******RFC del receptor****|*****Nombre del Receptor*****|58260|||605|CN01|CONCEPTO|84111505||1|ACT||Pago de nómina|1002.00|1002.00||01|COMPLEMENTO|NOMINA|1.2|O|2022-03-09|2022-03-15|2022-03-15|15|1001.00||1.00|EMISOR||CABL840215MDFSRS01||RECEPTOR|DAJU980516HCHRTV19|52886408542|1993-01-06|P1288W|04|No|01|02|2345|contabilidad|Puesto1|1|04|||105.25|110.00|DIF|PERCEPCIONES|1001.00|||1000.00|1.00|PERCEPCION|001|SUE|sueldos|1000.00|1.00|OTROSPAGOS|OTROPAGO|002|002|pago|1.00|SUBSIDIOALEMPLEO|1.00|

Retenciones

Retenciones descripcion de la cadena

DOCUMENTO|Retencion||LOTE|Pruebas|RETENCION|FolioInt|FechaExp|LugarExpRetenc|CveRetenc|DescRetenc|EMISOR|RfcE|NomDenRazSocE|RegimenFiscalE|RECEPTOR|Nacional|RfcR|NomDenRazSocR|CurpR|DomicilioFiscalR|PERIODO|MesIni|MesIni|Ejercicio|TOTALES|MontoTotOperacion|MontoTotGrav|MontoTotExent|MontoTotRet|UtilidadBimestralop|ISRCorrespondiente|IMP_RETENIDOS|IMPUESTO|BaseRet|ImpuestoRet

Retenciones ejemplo de la cadena

DOCUMENTO|Retencion|LOTE|Pruebas|RETENCION|2|2023-05-11T10:03:06|50060|14||EMISOR|KIJ0906199R1|KERNEL INDUSTIA JUGUETERA|601|RECEPTOR|Nacional|XAXX010101000|Publico en General||58260|PERIODO|04|04|2023|TOTALES|4999956.81|0.00|4999956.81|0.00|||

Timbrado por Web Services

Ejemplos de código para implementación de timbrado desde texto

Cliente en VB.NET

                            
                               Dim webServices As New WSTimbradoTexto.wsTimbradoTexto4 'referenciaWsLocal.wsTimbradoTexto()
                               Dim respuesta As New WSTimbradoTexto.resultado4 'referenciaWsLocal.resultado()
                               'Cargar en contenido el Archivo que contiene la cadena de texto
                               contenido
                               respuesta = webServices.TimbrarPorTexto4("demo.sifec@gmail.com", "Acceso$01", "511110", contenido)
                               'Manejo de ERRORES
                               If respuesta.errores <> "" Then
                                   TextBox1.Text = (respuesta.errores.ToString)
                               Else
                                   TextBox1.Text = respuesta.folioUUID
                                   'para descargar el xml timbrado
                                   File.WriteAllBytes(RUTA + "\PruebaXMLTimbrado.xml", respuesta.XML)
                                   'bajando el pdf formato generico
                                   If respuesta.PDF IsNot Nothing Then
                                       File.WriteAllBytes(RUTA + "\PruebaXMLPDFTimbrado.pdf", respuesta.PDF)
                                   End If
                                   TextBox1.Text = ("Creacion exitosa")
                               End If
                            
                        
Cliente en VB 6

                            
                                    Option Explicit
                                    Private Const cSOAPTimbrar = "<?xml version=""1.0"" encoding=""utf-8""?><soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""
xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/""><soap:Body><TimbrarPorTexto4 xmlns=
""www.facturaselectronicascfdi.com""><correo>string</correo><pass>string</pass><Proceso>string</Proceso><contenidoArchivo
>string</contenidoArchivo></TimbrarPorTexto4></soap:Body></soap:Envelope>" Private Const cSOAPCancelar = "<?xml version=""1.0"" encoding=""utf-8""?><soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""
xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/""><soap:Body><Cancelar4
xmlns=""www.facturaselectronicascfdi.com""><curCorreo>string</curCorreo><password>string</password><RfcEmisor>string</RfcEmisor>
<UUID>string</UUID></Cancelar4></soap:Body></soap:Envelope>" Private Sub Cancelar_Click() Dim parser As DOMDocument Set parser = New DOMDocument 'cargar el codigo SOAP para Cancelar parser.loadXML cSOAPCancelar 'parametros a enviar parser.selectSingleNode("/soap:Envelope/soap:Body/Cancelar4/curCorreo").Text = txtCorreo.Text parser.selectSingleNode("/soap:Envelope/soap:Body/Cancelar4/password").Text = txtPass.Text parser.selectSingleNode("/soap:Envelope/soap:Body/Cancelar4/RfcEmisor").Text = txtRfcEmisor.Text parser.selectSingleNode("/soap:Envelope/soap:Body/Cancelar4/UUID").Text = txtUUID.Text enviarComandoCancelar parser.xml, "www.facturaselectronicascfdi.com/Cancelar4" End Sub Private Sub enviarComandoCancelar(ByVal sXml As String, ByVal sSoapAction As String) ' Enviar el comando al servicio Web' ' usar XMLHTTP40 para enviar la información al servicio Web Dim OHttReq As XMLHTTP40 Set OHttReq = New XMLHTTP40 ' Enviar el comando de forma síncrona (se espera a que se reciba la respuesta) OHttReq.open "POST", txtUrlCancelar.Text, False ' las cabeceras a enviar al servicio Web ' (no incluir los dos puntos en el nombre de la cabecera) OHttReq.setRequestHeader "Content-Type", "text/xml; charset=utf-8" OHttReq.setRequestHeader "SOAPAction", sSoapAction ' enviar el comando OHttReq.send sXml ' ' este será el texto recibido del servicio Web procesarRespuestaCancelar OHttReq.responseText ' End Sub Private Sub procesarRespuestaCancelar(ByVal s As String) ' procesar la respuesta recibida del servicio Web 'Text1.Text = s ' ' Poner los datos en el analizador de XML Dim parser As DOMDocument Set parser = New DOMDocument parser.loadXML s ' On Error Resume Next ' Dim error As String error = parser.selectSingleNode("/soap:Envelope/soap:Body/Cancelar4Response/Cancelar4Result/errores").Text If error = "" Then txtRespuestaCancelacion.Text = "Cancelacion Exitosa" Else txtErrores.Text = error End If ' If Err.Number > 0 Then txtErrores.SetFocus End If End Sub Private Sub Timbrar_Click() Dim parser As DOMDocument Set parser = New DOMDocument ' cargar el código SOAP para Timbrar parser.loadXML cSOAPTimbrar ' ' Indicar el parámetro a enviar parser.selectSingleNode("/soap:Envelope/soap:Body/TimbrarPorTexto4/correo").Text = txtCorreo.Text parser.selectSingleNode("/soap:Envelope/soap:Body/TimbrarPorTexto4/pass").Text = txtPass.Text parser.selectSingleNode("/soap:Envelope/soap:Body/TimbrarPorTexto4/Proceso").Text = txtProceso.Text parser.selectSingleNode("/soap:Envelope/soap:Body/TimbrarPorTexto4/contenidoArchivo").Text = txtContenido.Text ' ' Mostrar el código XML enviado al servicio Web 'Text2.Text = parser.xml enviarComando parser.xml, "www.facturaselectronicascfdi.com/TimbrarPorTexto4" End Sub Private Sub enviarComando(ByVal sXml As String, ByVal sSoapAction As String) ' Enviar el comando al servicio Web ' ' usar XMLHTTP40 para enviar la información al servicio Web Dim OHttReq As XMLHTTP40 Set OHttReq = New XMLHTTP40 ' Enviar el comando de forma síncrona (se espera a que se reciba la respuesta) OHttReq.open "POST", txtURL.Text, False ' las cabeceras a enviar al servicio Web ' (no incluir los dos puntos en el nombre de la cabecera) OHttReq.setRequestHeader "Content-Type", "text/xml; charset=utf-8" OHttReq.setRequestHeader "SOAPAction", sSoapAction ' enviar el comando OHttReq.send sXml ' ' este será el texto recibido del servicio Web procesarRespuesta OHttReq.responseText ' End Sub Private Sub procesarRespuesta(ByVal s As String) ' procesar la respuesta recibida del servicio Web 'Text1.Text = s ' ' Poner los datos en el analizador de XML Dim parser As DOMDocument Set parser = New DOMDocument parser.loadXML s ' ' On Error Resume Next ' Dim error As String error = parser.selectSingleNode("/soap:Envelope/soap:Body/TimbrarPorTexto4Response/TimbrarPorTexto4Result/errores").Text If error = "" Then txtSello = parser.selectSingleNode("/soap:Envelope/soap:Body/TimbrarPorTexto4Response/TimbrarPorTexto4Result/sello").Text txtUUID = parser.selectSingleNode("/soap:Envelope/soap:Body/TimbrarPorTexto4Response/TimbrarPorTexto4Result/folioUUID").Text Dim xml, rutaXml As String Dim pdf, rutaPdf As String Dim path As String path = "C:\respuesta\" xml = parser.selectSingleNode("/soap:Envelope/soap:Body/TimbrarPorTexto4Response/TimbrarPorTexto4Result/XML").Text pdf = parser.selectSingleNode("/soap:Envelope/soap:Body/TimbrarPorTexto4Response/TimbrarPorTexto4Result/PDF").Text If xml <> "" Then '''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''Escribir la ruta de descarga de MXL'''''''' '''''''''''''''''''''''''''''''''''''''''''''''''''''' rutaXml = path + txtUUID.Text + ".xml" Open rutaXml For Binary Access Write As 1 'Escribimos los bytes del array anterior, en el nuevo archivo ( archivo 1 ) Put #1, , decodeBase64(xml) 'Cerramos los dos archivos Close End If If pdf <> "" Then '''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''Escribir la ruta de descarga de PDF'''''''' '''''''''''''''''''''''''''''''''''''''''''''''''''''' rutaPdf = path + txtUUID.Text + ".pdf" Open rutaPdf For Binary Access Write As 2 'Escribimos los bytes del array anterior, en el nuevo archivo ( archivo 2 ) Put #2, , decodeBase64(pdf) 'Cerramos los dos archivos Close End If Else txtErrores.Text = error End If ' If Err.Number > 0 Then txtErrores.SetFocus 'Text1.SetFocus End If End Sub Private Sub Form_WS_Load() Form_WS.Caption = "Cliente VB6" & vbCrLf & "del Servicio Web Timbrado por Texto 4.0" End Sub Private Function decodeBase64(ByVal strData As String) As Byte() Dim objXML As MSXML2.DOMDocument Dim objNode As MSXML2.IXMLDOMElement Set objXML = New MSXML2.DOMDocument Set objNode = objXML.createElement("b64") objNode.dataType = "bin.base64" objNode.Text = strData decodeBase64 = objNode.nodeTypedValue Set objNode = Nothing Set objXML = Nothing End Function
Cliente en PHP

                            
                               <?php
header('Content-Type: text/html; charset=UTF-8');
//Creamos el objeto con el que mandaremos a Timbrar 
$soapclient = new SoapClient('http://pruebas40.facturaselectronicascfdi.com/WsTimbradoTexto4.asmx?WSDL');

$ResultText = '';
$CanceText = '';

if (isset($_POST['TibrarTexto4'])) {


	//Cargamos nuestro archivo con la cadena de texto generada apartir de la guia proporcionara
	$file = "EjemploFacturaCadenaTextoFactura.txt";
	if (file_exists($file) && is_file($file) && is_readable($file)) {
		// File exists and is readable, proceed with opening it.
		$open = fopen($file, 'r');
		$size = filesize($file);
		$CadenaTexto = fread($open, $size);
		// Resto del codigo
		$Correo = "demo.sifec@gmail.com";
		$Pass = 'Acceso$01';
		$Proceso = "511110";
		$ClaveKey = '12345678a';
		$params = array('correo' => $Correo, 'pass' => $Pass, 'contenidoArchivo' => $CadenaTexto, 'Proceso' => $Proceso);
		try {
			$response = $soapclient->TimbrarPorTexto4($params);
			if (empty($response->TimbrarPorTexto4Result->errores)) {
				$ResultText = Alerta("El timbrado fue correcto UUID: " . $response->TimbrarPorTexto4Result->folioUUID, 'Exito!', 'success');
				$file = "XmlTimbrado.pdf";
				$miarch = fopen($file, "w");
				fwrite($miarch, $response->TimbrarPorTexto4Result->PDF);
				fclose($miarch);


				$file = "XmlTimbrado.xml";
				$miarch = fopen($file, "w");
				fwrite($miarch, $response->TimbrarPorTexto4Result->XML);
				fclose($miarch);
			} else {
				$ResultText = Alerta($response->TimbrarPorTexto4Result->errores, 'Error!', 'warning');
			}
		} catch (Exception $e) {
			$ResultText = Alerta($response->TimbrarPorTexto4Result->errores, 'Error!', 'danger');
		}
	} else {
		$ResultText = Alerta("El archivo no tiene permisos de lectura, o no existe.", 'Error;', 'warning');
	}
}

function Alerta($text, $titulo, $icon)
{
	$oAlerta = "<script>Swal.fire({
				title: '" . $titulo . "',
				text: '" . addslashes($text) . "',
				icon: '" . $icon . "',
				confirmButtonText: 'Cerrar'
			});</script>";
	return $oAlerta;
}
?>
<html>

<head>
	<title>Cliente Timbrado de CFDI. v4.0</title>
	<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
	<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11.7.10/dist/sweetalert2.all.min.js"></script>
	<link href="https://cdn.jsdelivr.net/npm/sweetalert2@11.7.10/dist/sweetalert2.min.css" rel="stylesheet">
</head>

<body>
	<div class="container">
		<div class="row pt-5">
			<div class="col-lg-12">
				<div class="card mb-12">
					<div class="card-body">
						<h5 class="card-title text-center">Cliente Web Service para timbrado de CFDI. v4.0</h5>
						<p class="card-text ">
							Timbrar40(Corre,Pass, xml, Proceso);</br>
							Este metodo requiere que el Emisor del Xml carge su cer y key en la plataforma web para poder realizar el sellado del xml enviado
							El xml a timbrar tiene que tener los siguientes atributos vacios NoCetificado="" Certificado="" Sello="" ya que el ws se encargara de sellar con el cer y key cargados, Este metodo regresar el xml timbrado
						</p>
						<form method="post" action="WS_Cliente_Timbrado_PHP.php" class="text-center">
							<input type="submit" name="TibrarTexto4" value="Timbrar" class="btn btn-success">
							<?php
							if ($ResultText <> '') {
								echo $ResultText;
								$ResultText = '';
							}
							?>
						</form>
					</div>
					<div class="card-footer text-center">
						<div class="footer-top">
							<div class="container">
								<div class="row">
									<div class="col-lg-4">
										<h3>Inowebs</h3>
										<a class="me-4 link-secondary" href="https://facturaselectronicascfdi.com/inicio">Inicio</a>
										<a class="me-4 link-secondary" href="https://facturaselectronicascfdi.com/precios">Precios</a>
										<a class="me-4 link-secondary" href="https://facturaselectronicascfdi.com/blog/BlogIndex">Blog</a>
										<a class="me-4 link-secondary" href="https://facturaselectronicascfdi.com/comprar">Comprar</a>
									</div>
									<div class="col-lg-8">

										<div class="footer-links">
											<h4>Contáctanos</h4>
											<div class="alert alert-info">
												<p>Los números de contacto solo estan disponibles en un horario de 9am a 5pm de lunes a viernes</p>
											</div>
											<p>
												<strong>Teléfono Ventas:</strong> (443)690 3616<br>
												<strong>Correo:</strong> ventas@inowebs.com, soporte@inowebs.com<br>
											</p>
											<p>
												<a href="https://facturaselectronicascfdi.com/Contact" class="btn btn-primary">Enviar correo</a>
											</p>
										</div>

									</div>
								</div>
							</div>
						</div>
						<div class="container">
							<div class="copyright">
								©INOWEBS <strong>FACTURACIÓN ELECTRÓNICA</strong> TODOS LOS DERECHOS RESERVADOS
							</div>
							<div class="credits">

							</div>
						</div>
					</div>
				</div>
			</div>
		</div>

</body>

</html>
                            
                        
Cliente en Excel VB Cliente en Java

                            
                                public static void main(String[] args){
                                    //declaramos nuestras variables
                                    String ruta="K:\\miruta\\";
                                    String correo="demo.sifec@gmail.com";
                                    String pass="Acceso$01";
                                    String rfc="AAA010101AAA";
                                    boolean pdf=true;
                                    String passCer="12345678a";
                                    try {
                                        //KEY RUTA
                                        //Cargar los archivos a las variables
                                        cerFile,keyFile,passCer
                                        Resultado timbrarNomina=timbradoPorTextoNomina(correo,pass,rfc,cerFile,keyFile,passCer,contenidoArchivo,pdf,"Pruebas","3.2-1.2");
                                        if (timbrarNomina.getErrores().equals("")){
                                            //si no existen errores
                                            System.out.println("\n\n\t RESULTAOD EXITOSO\n");
                                            //RUTA DE SALIDA DE PDF
                                            FileOutputStream fos=new FileOutputStream(ruta+"SalidaTimbre.pdf");
                                            fos.write(timbrarNomina.getPDF());
                                            fos.close();
                                            //RUTA DE SALIDA DE XML TIMBRADO
                                            FileOutputStream fos2=new FileOutputStream(ruta+"SalidaTimbre.xml");
                                            fos2.write(timbrarNomina.getXML());
                                            fos2.close();
                                        }
                                        else{
                                            System.out.println("Se generaron los siguientes errores:"+timbrarNomina.getErrores());
                                        } 
                                    } catch (Exception e){
                                        System.out.println("ERRORES******:"+e);
                                    }
                                }
                                private static org.tempuri.Resultado timbradoPorTextoNomina(String correo,String pass,String rfc,byte[]cerFile,
byte[]keyFile,String passCer,byte[]contenidoArchivo,boolean pdf,String ambiente,String version){ org.tempuri.WsTimbradoTexto service=new org.tempuri.WsTimbradoTexto(); org.tempuri.WsTimbradoTextoSoap port=service.getWsTimbradoTextoSoap12(); return port.timbradoPorTextoNomina(correo,pass,rfc,cerFile,keyFile,passCer,contenidoArchivo,pdf,ambiente, version); }
Cliente en C# Cliente en Visual Fox Pro

Nuestros precios

Nuestros paquetes de precios estan diseñados deacuerdo a lo que necesites

$ 1,617.25/5 folios

Paquete de timbres de texto + conexión webservice

  • Precio sin conexión webservice $ 17.25
  • * Los precios no incluyen IVA
  • * El pago de conexión de webservice es único
  • Complementos de pago
  • Addendas
Ver más precios

$ 1,630.80/10 folios

Paquete de timbres de texto + conexión webservice

  • Precio sin conexión webservice $ 30.80
  • * Los precios no incluyen IVA
  • * El pago de conexión de webservice es único
  • Complementos de pago
  • Addendas
Ver más precios

$ 1,674/25 folios

Paquete de timbres de texto + conexión webservice

  • Precio sin conexión webservice $ 74
  • * Los precios no incluyen IVA
  • * El pago de conexión de webservice es único
  • Complementos de pago
  • Addendas
Ver más precios

COMPRAR

Puedes realizar compra directa solo da ¡CLICK!

Facturación inowebs

Multiempresa, Multiemisor

Desde una sola cuenta de usuario podrás usar distintos emisores ya sean personas físcas o morales

Contamos con dos esquemas para administrar los folios

  • Independiente: Podrás transferir folios de tu cuenta a la de otros usuarios y ver el consumo que realizan
  • Centralizada: indistintamente del emisor, todos los folios los consumirán