Timbrado de texto
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. 3.3 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 3.3 descripción de la cadena

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

'Factura 3.3 ejemplo de la cadena

DOCUMENTO|Factura|ENVIO|Público en General|demo.sifec@gmail.com|COMPROBANTE|3.3|ADDENDA2|112|2017-11-15T10:48:01|01|1.00||MXN||1.16|I|PUE|61600|||CFDI_RELACIONADOS|6696a060-926c-4923-9155-d01453ea6590|CFDI_RELACION|01|EMISOR|LAN7008173R5|Alianza Logística del Potosí, S.A. de C.V.|601|RECEPTOR|XAXX010101000|Publico en General|||G01|CONCEPTO|01010101|011|1|DPC|uno|Timbrado desde WEB por texto México|1.00|1.00||C_IMP_TRASLADADO|1.00|002|Tasa|0.160000|0.16|IMPUESTOSTOTALES|0.16||IMPUESTOSCOMPROBANTE|IMP_TRASLADADO
|002|0.16|0.160000|Tasa|ADDENDA|ALPLogistics|Cantera #3800, Col. Conjunto Industrial de la Plata, Planta: DITSA ZACATECAS C.P. 98600|AV. HIDALGO Y CARR. PANAMERICANA #1016 COL CENTRO , Planta: DITSA SOMBRERETE C.P. 99100. Sombrerete, Zacatecas. México|76AC1M|EDIASA 3 PLANT #11207||

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|metodopago|lugardeexpedicion|confirmacion|condicionesdepago|CFDI_RELACIONADOS|uuid|CFDI_RELACION|
tiporelacion|EMISOR|rfc|nombre|regimenfiscal|RECEPTOR|rfc|nombre|
recidenciafiscal|NumRegIdTrib|UsoCFDI|CONCEPTO|ClaveProdServ|NoIdentificacion|Cantidad|ClaveUnidad|Unidad|Descripcion|ValorUnitario|Importe|Descuento|
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|TipoCambioDR|MetodoDePagoDR|NumParcialidad|ImpSaldoAnt|ImpPagado|ImpSaldoInsoluto|

'Recepción de pagos ejemplo de la cadena

DOCUMENTO|Factura|COMPROBANTE|3.3|P|22|2017-10-17T12:00:00||0||XXX||0|P||61600|||EMISOR|LAN7008173R5|CINDEMEX SA DE CV|601|RECEPTOR|XAXX010101000|COMPROBANTE GLOBAL DE OPERACIONES CON PÚBLICO EN GENERAL|||P01|CONCEPTO|
84111506||1|ACT||Pago|0|0||COMPLEMENTO|PAGOS|1.0|PAGO|2017-10-17T12:11:09|01|MXN||200|1|DOC_RELACIONADO|20e35d51-b6bb-441f-9dc6-3d5fe6e5fd6d|A|1|MXN||PPD|1|1000.00|100.00|900.00|DOC_RELACIONADO|
20e35d51-b6bb-441f-9dc6-3d5fe6e5fd6d|A|1|MXN||PPD|1|1000.00|100.00|900.00|

Nómina

'Nomina descripcion de la cadena

DOCUMENTO|Nomina|ENVIO|nombre|Correo|COMPROBANTE|version|serie|folio|fecha|formaPago||subtotal|descuento|moneda|tipocambio|total
|tipocomprobante|metodopago|lugardeexpedicion|confirmacion|condicionesdepago|CFDI_RELACIONADOS|uuid|CFDI_RELACION|tiporelacion
|EMISOR|rfc|nombre|regimenfiscal|RECEPTOR|rfc|nombre|recidenciafiscal|NumRegIdTrib|UsoCFDI|CONCEPTO|ClaveProdServ|NoIdentificacion
|Cantidad|ClaveUnidad|Unidad|Descripcion|ValorUnitario|Importe|Descuento||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|ENVIO|Público en General|demo.sifec@gmail.com|COMPROBANTE|3.3|A|16|2017-10-09T23:34:10|99|1001.00||MXN||1001.00|N|PUE|61600|||EMISOR|LAN7008173R5|CINDEMEX SA DE CV|601|RECEPTORAAA0101010AAA|juan|||P01|CONCEPTO|84111505||1|ACT||Pago de nómina|1001.00|1001.00|0.00|COMPLEMENTO|NOMINA|1.2|O|2017-10-09|2017-10-15|2017-10-15|15|1001.00|||EMISOR||1234567891dfrge||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|

Retenciones

Retenciones descripcion de la cadena

DOCUMENTO|Retencion|LOTE|Lote|RETENCION|FolioInt|FechaExp|CveRetencion|DescRetenc|EMISOR|RFCEmisor|NomDenRazSocE|Curpe|RECEPTOR|Nacionalidad|<Nacional[RFCRecep|NomDenRazSocR|Curpr]>o<Extranjero[NumRegldTrinb|NomDenRazSocR]>|PERIODO|MesIni|MesFin|Ejerc|TOTALES|montoTotOperacion
|montoTotGrav|montoTotExent|montoTotRet|IMP_RETENIDOS|IMPUESTO|BaseRet|Impuesto|montoRet|TipoPagoRet

Retenciones ejemplo de la cadena

DOCUMENTO|Retencion|LOTE|Pruebas|RETENCION|1|FechaServer|16||EMISOR|LAN7008173R5|CINDEMEX SA DE CV||RECEPTOR|Nacional|XAXX010101000|COMPROBANTE GLOBAL DE OPERACIONES CON PÚBLICO EN GENERAL||PERIODO|1|1|2008|TOTALES|1|1|1|1|IMP_RETENIDOS|IMPUESTO|1|02|0.16|Pago definitivo|

Retenciones con complemento ejemplo de la cadena

DOCUMENTO|Retencion|LOTE|Pruebas|RETENCION|3|FechaServer|16||EMISOR|LAN7008173R5|CINDEMEX SA DE CV||RECEPTOR|Nacional|XAXX010101000|COMPROBANTE GLOBAL DE OPERACIONES CON PÚBLICO EN GENERAL||PERIODO|1|1|2008|TOTALES|1|1|1|1|IMP_RETENIDOS|IMPUESTO|1|02|0.16|Pago definitivo|COMPLEMENTO|INTERESES|SI|SI|SI|1.00|2.00|3.00|

Autofactura por terceros

Autofactura por terceros descripción de la cadena

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

Autofactura por terceros ejemplo de la cadena

DOCUMENTO|Factura|ENVIO|Público en General|demo.sifec@gmail.com|COMPROBANTE|3.3|vbFP6|69|2018-02-21T12:00:01|01|1.00||MXN||1.16|I|PUE|61600|||CFDI_RELACIONADOS|6696a060-926c-4923-9155-d01453ea6590|CFDI_RELACION|01|EMISOR|XAXX010101000||616|RECEPTOR|LAN7008173R5||||G01|CONCEPTO|93151501|011|1|DPC|uno|Timbrado desde WEB por texto México|1.00|1.00||C_IMP_TRASLADADO|1.00|002|Tasa|0.160000|0.16|IMPUESTOSTOTALES|0.16||IMPUESTOSCOMPROBANTE|IMP_TRASLADADO|002|0.16|0.160000|Tasa|

Timbrado por Web Services

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

Cliente en VB.NET


     Dim webServices As New WSTimbradoTexto.wsTimbradoTexto33 'referenciaWsLocal.wsTimbradoTexto()
        Dim respuesta As New WSTimbradoTexto.resultado33 'referenciaWsLocal.resultado()
        'Cargar en contenido el Archivo que contiene la cadena de texto
        contenido
        respuesta = webServices.TimbrarPorTexto33("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><TimbrarPorTexto33 xmlns=
""www.facturaselectronicascfdi.com""><correo>string</correo><pass>string</pass><Proceso>string</Proceso><contenidoArchivo
>string</contenidoArchivo></TimbrarPorTexto33></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><Cancelar33
xmlns=""www.facturaselectronicascfdi.com""><curCorreo>string</curCorreo><password>string</password><RfcEmisor>string</RfcEmisor>
<UUID>string</UUID></Cancelar33></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/Cancelar33/curCorreo").Text = txtCorreo.Text parser.selectSingleNode("/soap:Envelope/soap:Body/Cancelar33/password").Text = txtPass.Text parser.selectSingleNode("/soap:Envelope/soap:Body/Cancelar33/RfcEmisor").Text = txtRfcEmisor.Text parser.selectSingleNode("/soap:Envelope/soap:Body/Cancelar33/UUID").Text = txtUUID.Text enviarComandoCancelar parser.xml, "www.facturaselectronicascfdi.com/Cancelar33" 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/Cancelar33Response/Cancelar33Result/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/TimbrarPorTexto33/correo").Text = txtCorreo.Text parser.selectSingleNode("/soap:Envelope/soap:Body/TimbrarPorTexto33/pass").Text = txtPass.Text parser.selectSingleNode("/soap:Envelope/soap:Body/TimbrarPorTexto33/Proceso").Text = txtProceso.Text parser.selectSingleNode("/soap:Envelope/soap:Body/TimbrarPorTexto33/contenidoArchivo").Text = txtContenido.Text ' ' Mostrar el código XML enviado al servicio Web 'Text2.Text = parser.xml enviarComando parser.xml, "www.facturaselectronicascfdi.com/TimbrarPorTexto33" 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/TimbrarPorTexto33Response/TimbrarPorTexto33Result/errores").Text If error = "" Then txtSello = parser.selectSingleNode("/soap:Envelope/soap:Body/TimbrarPorTexto33Response/TimbrarPorTexto33Result/sello").Text txtUUID = parser.selectSingleNode("/soap:Envelope/soap:Body/TimbrarPorTexto33Response/TimbrarPorTexto33Result/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/TimbrarPorTexto33Response/TimbrarPorTexto33Result/XML").Text pdf = parser.selectSingleNode("/soap:Envelope/soap:Body/TimbrarPorTexto33Response/TimbrarPorTexto33Result/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 3.3" 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://pruebas.facturaselectronicascfdi.com/WsTimbradoTexto33.asmx?WSDL');
//Creamos el objeto con el que se mandara a cancelar los folios
$soapclient=new SoapClient('http://pruebas.facturaselectronicascfdi.com/wsCancelar33.asmx?WSDL');
$ResultText='';
$CanceText='';
if(isset($_POST['SellarTimbrartexto33']))
{
	//Cargamos nuestro archivo con la cadena de texto generada apartir de la guia proporcionara
	$file1="EjemploFacturaCadenaTexto.txt";
	$open=fopen($file1,"r");
	$size=filesize($file1);
	$CadenaTexto=fread($open,$size);
	//Cargamos el Certificado que se utilizara en este xml
	$file2="certificado.cer";
	$open=fopen($file2,"r");
	$size=filesize($file2);
	$Cer=fread($open,$size);
	//Cargamos el Key que se utilizara en este xml
	$file30="csd.key";
	$open=fopen($file3, "r");
	$size=filesize($file3);
	$Key=fread($open, $size);
	$Correo="demo.sifec@gmail.com";
	$Pass='Acceso$01';
	$Proceso="511110";
	$ClaveKey='12345678a';
	//SellarTimbrar33(Correo, Pass, contenidoArchivo, Proceso, cer, key, clavekey);
	//Correo:Este campo debe de incluir el correo con el que fue habilitada su cuenta
	//Pass:Su contraseña 
	//contenidoArchivo:Cadena de texto
	//Proceso:Este numero de proceso se le proporcionara dependiendo de su tipo de timbrado
	//-511110 Cadena de texto a XML,Sellado, Timbrado, PDF 
	//Cer:Certificado en Bytes
	//Key:Key en Bytes
	//Clave Key:Clave de su key 
	$params=array('curCorreo' =>$Correo,'password'=>$Pass,'contenidoArchivo'=>$CadenaTexto,'Proceso'=> $Proceso,'CerFile'
=> $Cer,'KeyFile'=>$Key,'PassCsd'=>$ClaveKey); try{ $response=$soapclient->SellarTimbrarTexto33($params); if(empty($response->SellarTimbrarTexto33Result->errores)) { $ResultText='<br>El timbrado fue correcto<br>UUID:'.$response >SellarTimbrarTexto3333Result->folioUUID; $file="XmlTimbrado.pdf"; $miarch=fopen($file, "w"); fwrite($miarch,$response->SellarTimbrar33Result->PDF); fclose($miarch); $file="XmlTimbrado.xml"; $miarch=fopen($file,"w"); fwrite($miarch,$response->SellarTimbrar33Result->XML); fclose($miarch); }else{ $ResultText='<br>El timbrado tuvo errores<br>Errores:'.$response->SellarTimbrar33Result->errores; } } catch(Exception $e){ $ResultText="Se genero el siguiente error: <br>".$response->Timbrar33Result->errores; } } if(isset($_POST['TibrarTexto33'])) { //Cargamos nuestro archivo con la cadena de texto generada apartir de la guia proporcionara $file1="EjemploFacturaCadenaTexto.txt"; $open=fopen($file1,"r"); $size=filesize($file1); $CadenaTexto=fread($open, $size); //SellarTimbrar33(Correo, Pass, contenidoArchivo, Proceso, cer, key, clavekey); //Correo:Este campo debe de incluir el correo con el que fue habilitada su cuenta //Pass:Su contraseña //contenidoArchivo:Cadena de Texto //Proceso:Este numero de proceso se le proporcionara dependiendo de su tipo de timbrado //- 511110 Cadena de texto a XML,Sellado, Timbrado, PDF //Cer:Certificado en Bytes //Key:Key en Bytes //Clave Key:Clave de su key $Correo="demo.sifec@gmail.com"; $Pass='Acceso$01'; $Proceso="511110"; $ClaveKey='12345678a'; $params=array('curCorreo =>$Correo,'password'=>$Pass,'contenidoArchivo'=>$CadenaTexto,'Proceso'=>$Proceso); //var_dump($params); try{ $response=$soapclient->Timbrar33($params); //var_dump($response); //if(empty($response->timbrarResult->errores)) if(empty($response->Timbrar33Result->errores)) { $ResultText="<br>El timbrado fue correcto <br>UUID:".$response->Timbrar33Result->folioUUID; $file="XmlTimbrado.pdf"; $miarch=fopen($file,"w"); fwrite($miarch, $response->Timbrar33Result->PDF ); fclose($miarch); $file = "XmlTimbrado.xml"; $miarch = fopen($file, "w"); fwrite($miarch, $response->Timbrar33Result->XML ); fclose($miarch); }else{ $ResultText= "<br>El timbrado tuvo errores <br> Errores:".$response->Timbrar33Result->errores; } } catch (Exception $e){ $ResultText= "Se genero el siguiente error: <br>".$response->Timbrar33Result->errores; } } if(isset($_POST['Cancelar'])) { $Correo="demo.sifec@gmail.com"; $Pass='Acceso$01'; $params=array('curCorreo'=>$Correo,'password'=>$Pass,'RfcEmisor'=>'LAN7008173R5','UUID'=>'691a62ce-f987-421a-a8c4-be851d59b17a'); try{ $response=$soapclient->Cancelar33($params); if(empty($response->Cancelar33Result->errores)) { $CanceText="<br>Cancelacion fue correcto <br>"; }else{ $CanceText="<br>El cancelar tuvo errores<br>Errores:".$response->Cancelar33Result->errores; } } catch (Exception $e){ $CanceText="Se genero el siguiente error:<br>".$e->getMessage(); } } if(isset($_POST['CancelarEncode'])) { $Correo="demo.sifec@gmail.com"; $Pass='Acceso$01'; //Cargamos el Certificado que se utilizara para cancelar este xml $file2="certificado.cer"; $open=fopen($file2,"r"); $size=filesize($file2); $Cer=fread($open,$size); //Cargamos el Key con el cual procesaremos el Encode $convert=exec('openssl pkcs8-inform DER-in csd.key-passin pass:12345678a-out Encode.pem',$salida,$valor); if($valor==127){ $CanceText="no Funcionó"; }else{ $CanceText="Se ejecutó correctamente"; } $file="Encode.pem"; $open=fopen($file, "r"); $size=filesize($file); $pem=fread($open, $size); $pem2=str_replace("-----BEGIN PRIVATE KEY-----","",$pem); $Encode=str_replace("-----END PRIVATE KEY-----", "",$pem2); $params=array('curCorreo'=> $Correo,'password=>$Pass,'RfcEmisor'=>'LAN7008173R5','UUID'=>
'7dbd76b1-ac3b-4251-a919-c03a509ff5ec','CerFile'=>$Cer,'KeyEncode64'=>$Encode); try{ $response=$soapclient->Cancelar33($params); if(empty($response->Cancelar33Result->errores)) { $CanceText="<br>Cancelacion fue correcto <br>"; }else{ $CanceText="<br>El cancelar tuvo errores <br>Errores:".$response->Cancelar33Result->errores; } } catch (Exception $e){ $CanceText="Se genero el siguiente error: <br>".$e->getMessage(); } } ?> <html> <head> <title>Cliente del Web Server para timbrado de CFDI.v3.3</title> </head> <body> <div>Cliente del Web Server para timbrado de CFDI.v3.3</div> <br> <form method="post" action="soapcfdi2.php"> <br>Metodos Para el Timbrado <br> <table border="1px"> <tr> <td align="center"> <input type="submit" name="SellarTimbrar33" value="SellarTimbrar33"> </td> <td> <p>-SellarTimbrar33(Correo, Pass, xml, Proceso, cer, key, clavekey);</p> <p>-Este metodo SellarTimbrar33 requiere un .cer y .key con el que se mandara timbrar el xml estos tiene
que coincidir con el Emisor</p> <p>-Recolecta el cer y key en caso de timbrar correctamente deposita el xml y pdf en caso de existir</p> </td> </tr> <tr> <td align="center"><input type="submit" name="Tibrar33"value="Tibrar33"></td> <td> <p>-Timbrar33(Corre,Pass, xml,Proceso);</p> <p>-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</p> <p>-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> </td> </tr> <tr > <td colspan="2"> <p>Resultado de Timbrado</p> </td> </tr> <tr > <td colspan="2"> <p><?php echo $ResultText;?></p> <br> </td> </tr> </table> </br> <br> Metodo de Cancelacion <table border="1px"> <tr> <td align="center"><input type="submit"name="Cancelar"value="Cancelar"></td> <td> <br> <p>Cancelar33(Correo,Pass,RFC,UUID);cer y key configurados en porta web</p> <br> </td> </tr> <tr> <td align="center"><input type="submit" name="CancelarEncode" value="CancelarEncode"></td> <td> <br> <p>Cancelar33EncodeCSD(Correo,Pass,RFC,UUID,Cer,Pem); cer y pem se generan por su sistema</p> <br> </td> </tr> <tr > <td colspan="2"> <p><?php echo $CanceText;?></p> <br> </td> </tr> </table> </form> </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#

Descarga las guías para implementar en Lenguajes de Conexión

Guia para timbrar con VB.NET Guia para timbrar con Java Guia para timbrar con C Guia para timbrar con PHP

Nuestros precios

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

$ 1,615/5 folios

Paquete de timbres de texto + conexión webservice

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

$ 1,627/10 folios

Paquete de timbres de texto + conexión webservice

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

$ 1,665/25 folios

Paquete de timbres de texto + conexión webservice

  • Precio sin conexión webservice $ 65
  • * 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