INTRODUCCION


Bienvenido al servicio de certificación (timbrado) de Comprobantes Fiscales Digitales por Internet en México. Para poder integrarte contaras con dos tipos de cuenta:


1) Cuenta de prueba


Para poder empezar a utilizar nuestra plataforma es necesario que tengas una cuenta en nuestro ambiente de pruebas. Si aún no tienes una cuenta puedes solicitarla a soportecloud@masnegocio.com indicando la volumétria mensual que requieres, es completamente gratis y muy sencillo.

Con esta cuenta podrás probar el servicio de timbrado sin realizar timbres reales. Utiliza este ambiente para integrar y probar tu aplicación. La ubicación del ambiente de prueba es:

WebService
Portal de consulta (dashboard):


2) Cuenta producción


Una vez concluidas tus pruebas, y que cuentes con una relación contractual, podrás solicitar tu activación a producción solicitándolo a través del correo electrónico que te llegó al momento de activar tu cuenta de pruebas. A cambio recibirás un correo electrónico con tu usuario y contraseña para ingresar al portal de consulta y token de producción para conectarte al Web Service.

WebService
Portal Producción

INTEGRACION


DEFINICIÓN WEBSERVICE




EJEMPLOS

Wsdl
.NET
Wsdl
PHP
Wsdl
JAVA

VIDEO DEMO

PHP - Emitir

La siguiente función describe la invocación al servicio de FacE Timbre para solicitar el timbrado de un CFDi


					private function emitir($token,$noControl,$xmlB64, $correoElectronico, $plantillaMail, $plantillaPDF)
					{
					    $contentXML = "";

					    $contentXML += "\n";
					    $contentXML += "";
					    $contentXML += "";
					    $contentXML += "";
					    $contentXML += "" + $token + "";

					    if ($noControl!=null){
					        $contentXML .= "\t\t\t" . $noControl . "\n";
					    }

					    $contentXML += "" + $correoElectronico + "\n";
					    $contentXML += "" + $plantillaMail + "\n";
					    $contentXML += "" + $plantillaPDF + "\n";
					    $contentXML .= "\t\t\t" . $xmlB64 . "\n";
					    $contentXML .= "\t\t\n";
					    $contentXML .= "\t\n";
					    $contentXML .= "\n";

					    $postData = $contentXML;


					    $length = count($postData);

					    $headers = array("Content-type: text/xml;charset=\"utf-8\"",
					                         "SOAPAction: http://www.masnegocio.com/servicios/emision",
					                         "Content-length: ".strlen($postData));


					    $ch = curl_init();

					    curl_setopt($ch, CURLOPT_URL,'https://face-timbre.masnegocio.com/mn-pac-servicios/servicios');
					    curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
					    curl_setopt($ch, CURLOPT_HEADER, false);
					    curl_setopt($ch, CURLOPT_POST, $length);
					    curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
					    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
					    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
					    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,10);
					    curl_setopt($ch, CURLOPT_TIMEOUT,10);
					    curl_setopt($ch, CURLOPT_VERBOSE, true);
					    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);


					    $result=curl_exec($ch);


					    if($result === false) {
					        echo "es falso";
					        $err = 'Curl error: ' . curl_error($ch);
					        curl_close($ch);
					        print $err;
					    } else {
					        curl_close($ch);
					    }

					    return $result;

					}
		   		

PHP - Cancelar

La siguiente función describe la invocación al servicio de FacE Timbre para solicitar la cancelación de un CFDi


					private function cancelar($token,$liberarNoControl,$xmlB64)
					{
				        $contentXML = "";

				                $contentXML += "";
				                $contentXML += "";
				                $contentXML += "";
				                $contentXML += "";
				                $contentXML += "" + $token + "";
				                $contentXML += "" + $xmlB64 + "";
				                $contentXML += "" + $liberarNoControl + "";
				                $contentXML += "";
				                $contentXML += "";
				                $contentXML += "";

				        $postData = $contentXML;


				        $length = count($postData);

				        $headers = array("Content-type: text/xml;charset=\"utf-8\"",
				                             "SOAPAction: http://www.masnegocio.com/servicios/cancelacion",
				                             "Content-length: ".strlen($postData));


				        $ch = curl_init();

				        curl_setopt($ch, CURLOPT_URL,' https://face-timbre.masnegocio.com/mn-pac-servicios/servicios');
				        curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
				        curl_setopt($ch, CURLOPT_HEADER, false);
				        curl_setopt($ch, CURLOPT_POST, $length);
				        curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
				        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
				        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
				        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,10);
				        curl_setopt($ch, CURLOPT_TIMEOUT,10);
				        curl_setopt($ch, CURLOPT_VERBOSE, true);
				        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);


				        $result=curl_exec($ch);


				        if($result === false) {
				            echo "es falso";
				            $err = 'Curl error: ' . curl_error($ch);
				            curl_close($ch);
				            print $err;
				        } else {

				            curl_close($ch);
				        }

				        return $result;

				    }
		   		

PHP - Acuse Emisión

La siguiente función describe la invocación al servicio de FacE Timbre para solicitar el acuse de un CFDi


						private function acuseEmision($token,$anioMes,$uuid)
						{
						    $contentXML = "";

						        $contentXML += "";
						        $contentXML += "";
						        $contentXML += "";
						        $contentXML += "";
						        $contentXML += "" + $token + "";
						        $contentXML += "" + $anioMes + "";
						        $contentXML += "" + $uuid + "";
						        $contentXML += "";
						        $contentXML += "";
						        $contentXML += "";

						    $postData = $contentXML;


						    $length = count($postData);

						    $headers = array("Content-type: text/xml;charset=\"utf-8\"",
						                         "SOAPAction: http://www.masnegocio.com/servicios/acuseEmision",
						                         "Content-length: ".strlen($postData));


						    $ch = curl_init();




						    curl_setopt($ch, CURLOPT_URL,'https://face-timbre.masnegocio.com/mn-pac-servicios/servicios');
						    curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
						    curl_setopt($ch, CURLOPT_HEADER, false);
						    curl_setopt($ch, CURLOPT_POST, $length);
						    curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
						    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
						    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
						    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,10);
						    curl_setopt($ch, CURLOPT_TIMEOUT,10);
						    curl_setopt($ch, CURLOPT_VERBOSE, true);
						    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);


						    $result=curl_exec($ch);


						    if($result === false) {
						        echo "es falso";
						        $err = 'Curl error: ' . curl_error($ch);
						        curl_close($ch);
						        print $err;
						    } else {
						        curl_close($ch);
						    }

						    return $result;

						}


		   		

PHP - Acuse Cancelación

La siguiente función describe la invocación al servicio de FacE Timbre para solicitar el acuse de cancelación de un CFDi


						private function acuseCancelacion($token,$anioMes,$uuid)
						{
					        $contentXML = "";

					                 $contentXML += "";
					                 $contentXML += "";
					                 $contentXML += "";
					                 $contentXML += "";
					                 $contentXML += "" + $token + "";
					                 $contentXML += "" + $anioMes + "";
					                 $contentXML += "" + $uuid + "";
					                 $contentXML += "";
					                 $contentXML += "";
					                 $contentXML += "";

					        $postData = $contentXML;


					        $length = count($postData);

					        $headers = array("Content-type: text/xml;charset=\"utf-8\"",
					                             "SOAPAction: http://www.masnegocio.com/servicios/acuseCancelacion",
					                             "Content-length: ".strlen($postData));


					        $ch = curl_init();

					        curl_setopt($ch, CURLOPT_URL,'https://face-timbre.masnegocio.com/mn-pac-servicios/servicios');
					        curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
					        curl_setopt($ch, CURLOPT_HEADER, false);
					        curl_setopt($ch, CURLOPT_POST, $length);
					        curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
					        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
					        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
					        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,10);
					        curl_setopt($ch, CURLOPT_TIMEOUT,10);
					        curl_setopt($ch, CURLOPT_VERBOSE, true);
					        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);


					        $result=curl_exec($ch);


					        if($result === false) {
					            echo "es falso";
					            $err = 'Curl error: ' . curl_error($ch);
					            curl_close($ch);
					            print $err;
					        } else {

					            curl_close($ch);
					        }

					        return $result;

					    }


		   		

PHP - Retención Emisión

La siguiente función describe la invocación al servicio de FacE Timbre para solicitar la emisión de una retención

						private function emitirRetencion($token,$noControl,$xmlB64)
						{
						    $contentXML = "";

						    $contentXML += "";
						    $contentXML += "";
						    $contentXML += "";
						    $contentXML += "";
						    $contentXML += "" + $token + "";



						    if ($noControl!=null){
						        $contentXML .= "" . $noControl . "\n";
						    }

						    $contentXML += "" + $xmlB64 + "";
						    $contentXML += "";
						    $contentXML += "";
						    $contentXML += "";

						    $postData = $contentXML;


						    $length = count($postData);

						    $headers = array("Content-type: text/xml;charset=\"utf-8\"",
						                         "SOAPAction: http://www.masnegocio.com/servicios/retencionEmision",
						                         "Content-length: ".strlen($postData));


						    $ch = curl_init();




						    curl_setopt($ch, CURLOPT_URL,'https://face-timbre.masnegocio.com/mn-pac-servicios/servicios');
						    curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
						    curl_setopt($ch, CURLOPT_HEADER, false);
						    curl_setopt($ch, CURLOPT_POST, $length);
						    curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
						    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
						    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
						    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,10);
						    curl_setopt($ch, CURLOPT_TIMEOUT,10);
						    curl_setopt($ch, CURLOPT_VERBOSE, true);
						    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);


						    $result=curl_exec($ch);


						    if($result === false) {
						        echo "es falso";
						        $err = 'Curl error: ' . curl_error($ch);
						        curl_close($ch);
						        print $err;
						    } else {
						        curl_close($ch);
						    }

						    return $result;

						}



		   		

PHP - Retención Cancelación

La siguiente función describe la invocación al servicio de FacE Timbre para solicitar la cancelación de una retención


						private function cancelarRetencion($token,$xmlB64,$liberarNoControl)
						{
						    $contentXML = "";

						            $contentXML += "";
						            $contentXML += "";
						            $contentXML += "";
						            $contentXML += "";
						            $contentXML += "" + $token + "";
						            $contentXML += "" + $xmlB64 + "";
						            $contentXML += "" + $liberarNoControl + "";
						            $contentXML += "";
						            $contentXML += "";
						            $contentXML += "";

						    $postData = $contentXML;


						    $length = count($postData);

						    $headers = array("Content-type: text/xml;charset=\"utf-8\"",
						                         "SOAPAction: http://www.masnegocio.com/servicios/retencionCancelacion",
						                         "Content-length: ".strlen($postData));


						    $ch = curl_init();

						    curl_setopt($ch, CURLOPT_URL,'https://face-timbre.masnegocio.com/mn-pac-servicios/servicios');
						    curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
						    curl_setopt($ch, CURLOPT_HEADER, false);
						    curl_setopt($ch, CURLOPT_POST, $length);
						    curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
						    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
						    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
						    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,10);
						    curl_setopt($ch, CURLOPT_TIMEOUT,10);
						    curl_setopt($ch, CURLOPT_VERBOSE, true);
						    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);


						    $result=curl_exec($ch);


						    if($result === false) {
						        echo "es falso";
						        $err = 'Curl error: ' . curl_error($ch);
						        curl_close($ch);
						        print $err;
						    } else {

						        curl_close($ch);
						    }

						    return $result;

						}


		   		

PHP - Validación

La siguiente función describe la invocación al servicio de FacE Timbre para la validación

						private function validacion($token,$xmlB64,$tipoRespuesta)
						{
						    $contentXML = "";

						            $contentXML += "";
						            $contentXML += "";
						            $contentXML += "";
						            $contentXML += "";
						            $contentXML += "" + $token + "";
						            $contentXML += "" + $xmlB64 + "";
						            $contentXML += "" + $tipoRespuesta + "";
						            $contentXML += "";
						            $contentXML += "";
						            $contentXML += "";

						    $postData = $contentXML;


						    $length = count($postData);

						    $headers = array("Content-type: text/xml;charset=\"utf-8\"",
						                         "SOAPAction: http://www.masnegocio.com/servicios/validacion",
						                         "Content-length: ".strlen($postData));


						    $ch = curl_init();

						    curl_setopt($ch, CURLOPT_URL,'https://face-timbre.masnegocio.com/mn-pac-servicios/servicios');
						    curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
						    curl_setopt($ch, CURLOPT_HEADER, false);
						    curl_setopt($ch, CURLOPT_POST, $length);
						    curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
						    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
						    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
						    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,10);
						    curl_setopt($ch, CURLOPT_TIMEOUT,10);
						    curl_setopt($ch, CURLOPT_VERBOSE, true);
						    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);


						    $result=curl_exec($ch);


						    if($result === false) {
						        echo "es falso";
						        $err = 'Curl error: ' . curl_error($ch);
						        curl_close($ch);
						        print $err;
						    } else {

						        curl_close($ch);
						    }

						    return $result;

						}



		   		

PHP - Generación de PDF

La siguiente función describe la invocación al servicio de FacE Timbre para la generación de PDF

						private function generacionPdf($token,$xmlB64,$plantillaPDF)
						{
						    $contentXML = "";

						            $contentXML += "";
						            $contentXML += "";
						            $contentXML += "";
						            $contentXML += "";
						            $contentXML += "" + $token + "";
						            $contentXML += "" + $xmlB64 + "";
						            $contentXML += "" + $plantillaPDF + "";
						            $contentXML += "";
						            $contentXML += "";
						            $contentXML += "";

						    $postData = $contentXML;


						    $length = count($postData);

						    $headers = array("Content-type: text/xml;charset=\"utf-8\"",
						                         "SOAPAction: http://www.masnegocio.com/servicios/pdf/generacion",
						                         "Content-length: ".strlen($postData));


						    $ch = curl_init();

						    curl_setopt($ch, CURLOPT_URL,'https://face-timbre.masnegocio.com/mn-pac-servicios/servicios');
						    curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
						    curl_setopt($ch, CURLOPT_HEADER, false);
						    curl_setopt($ch, CURLOPT_POST, $length);
						    curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
						    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
						    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
						    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,10);
						    curl_setopt($ch, CURLOPT_TIMEOUT,10);
						    curl_setopt($ch, CURLOPT_VERBOSE, true);
						    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);


						    $result=curl_exec($ch);


						    if($result === false) {
						        echo "es falso";
						        $err = 'Curl error: ' . curl_error($ch);
						        curl_close($ch);
						        print $err;
						    } else {

						        curl_close($ch);
						    }

						    return $result;

						}



		   		

PHP - Reenvio de correo

La siguiente función describe la invocación al servicio de FacE Timbre para el reenvio de correo

						private function reenvioCorreo($xmlB64,$correoElectronico,$plantillaPDF, $plantillaMail)
						{
						    $contentXML = "";

						            $contentXML += "";
						            $contentXML += "";
						            $contentXML += "";
						            $contentXML += "";
						            $contentXML += "" + xmlB64 + "";
						            $contentXML += "" + correoElectronico + "";

						            if ($plantillaPDF != null) {
						                $contentXML += "" + $plantillaPDF + "";
						            }

						            if ($plantillaMail != null) {
						                $contentXML += "" + $plantillaMail + "";
						            }

						            $contentXML += "";
						            $contentXML += "";
						            $contentXML += "";

						    $postData = $contentXML;


						    $length = count($postData);

						    $headers = array("Content-type: text/xml;charset=\"utf-8\"",
						                         "SOAPAction: http://www.masnegocio.com/servicios/mail/reenvio",
						                         "Content-length: ".strlen($postData));


						    $ch = curl_init();

						    curl_setopt($ch, CURLOPT_URL,'https://face-timbre.masnegocio.com/mn-pac-servicios/servicios');
						    curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
						    curl_setopt($ch, CURLOPT_HEADER, false);
						    curl_setopt($ch, CURLOPT_POST, $length);
						    curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
						    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
						    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
						    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,10);
						    curl_setopt($ch, CURLOPT_TIMEOUT,10);
						    curl_setopt($ch, CURLOPT_VERBOSE, true);
						    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);


						    $result=curl_exec($ch);


						    if($result === false) {
						        echo "es falso";
						        $err = 'Curl error: ' . curl_error($ch);
						        curl_close($ch);
						        print $err;
						    } else {

						        curl_close($ch);
						    }

						    return $result;

						}



		   		

C# - Emitir

La siguiente función describe la invocación al servicio de FacE Timbre para solicitar el timbrado de un CFDi


					 public static String Emitir(String token, String xmlB64, String noControl, String correoElectronico, String plantillaMail, String plantillaPDF)
				        {

				            String contentXML = "";
				            String response = "";
				            try
				            {


				                contentXML += "\n";
				                contentXML += "";
				                contentXML += "";
				                contentXML += "";
				                contentXML += "" + token + "";

				                if (!String.IsNullOrEmpty(noControl))
				                {
				                    contentXML += "" + noControl + "";
				                }

				                contentXML += "" + correoElectronico + "\n";
				                contentXML += "" + plantillaMail + "\n";
				                contentXML += "" + plantillaPDF + "\n";
				                contentXML += "" + xmlB64 + "\n";
				                contentXML += "\n";
				                contentXML += "\n";
				                contentXML += "\n";

				                Uri uri = new Uri("https://face-timbre.masnegocio.com/mn-pac-servicios/servicios");

				                WebRequest webRequest = WebRequest.Create(uri);

				                webRequest.ContentType = "text/xml;charset=UTF-8";
				                webRequest.ContentLength = contentXML.Length;

				                webRequest.Headers.Add("SOAPAction", "http://www.masnegocio.com/servicios/emision");
				                webRequest.Method = "POST";

				                webRequest.GetRequestStream().Write(Encoding.UTF8.GetBytes(contentXML), 0, contentXML.Length);

				                using (WebResponse webResponse = webRequest.GetResponse())
				                {
				                    using (StreamReader streamReader = new StreamReader(webResponse.GetResponseStream()))
				                    {
				                        response = streamReader.ReadToEnd();
				                    }
				                }
				            }
				            catch (Exception e)
				            {
				                throw e;
				            }

				            return response;
				        }
		   		

C# - Cancelar

La siguiente función describe la invocación al servicio de FacE Timbre para solicitar la cancelación de un CFDi


							public static String Cancelar(String token, String xmlB64, String liberarNoControl)
					        {
					            String contentXML = "";
					            String response = "";
					            try
					            {


					                contentXML += "";
					                contentXML += "";
					                contentXML += "";
					                contentXML += "";
					                contentXML += "" + token + "";
					                contentXML += "" + xmlB64 + "";
					                contentXML += "" + liberarNoControl + "";
					                contentXML += "";
					                contentXML += "";
					                contentXML += "";


					                Uri uri = new Uri("https://face-timbre.masnegocio.com/mn-pac-servicios/servicios");

					                WebRequest webRequest = WebRequest.Create(uri);

					                webRequest.ContentType = "text/xml;charset=UTF-8";
					                webRequest.ContentLength = contentXML.Length;

					                webRequest.Headers.Add("SOAPAction", "http://www.masnegocio.com/servicios/cancelacion");
					                webRequest.Method = "POST";

					                webRequest.GetRequestStream().Write(Encoding.UTF8.GetBytes(contentXML), 0, contentXML.Length);

					                using (WebResponse webResponse = webRequest.GetResponse())
					                {
					                    using (StreamReader streamReader = new StreamReader(webResponse.GetResponseStream()))
					                    {
					                        response = streamReader.ReadToEnd();
					                    }
					                }
					            }
					            catch (Exception e)
					            {
					                throw e;
					            }

					            return response;
					        }
		   		

C# - Acuse Emisión

La siguiente función describe la invocación al servicio de FacE Timbre para solicitar el acuse de emisión de un CFDI

							public static String AcuseEmision(String token, String anioMes, String uuid)
					        {

					            String contentXML = "";
					            String response = "";
					            try
					            {


					                contentXML += "";
					                contentXML += "";
					                contentXML += "";
					                contentXML += "";
					                contentXML += "" + token + "";
					                contentXML += "" + anioMes + "";
					                contentXML += "" + uuid + "";
					                contentXML += "";
					                contentXML += "";
					                contentXML += "";

					                Uri uri = new Uri("https://face-timbre.masnegocio.com/mn-pac-servicios/servicios");

					                WebRequest webRequest = WebRequest.Create(uri);
					                webRequest.ContentType = "text/xml;charset=UTF-8";
					                webRequest.ContentLength = contentXML.Length;
					                webRequest.Headers.Add("SOAPAction", "http://www.masnegocio.com/servicios/acuseEmision");
					                webRequest.Method = "POST";

					                webRequest.GetRequestStream().Write(Encoding.UTF8.GetBytes(contentXML), 0, contentXML.Length);

					                using (WebResponse webResponse = webRequest.GetResponse())
					                {
					                    using (StreamReader streamReader = new StreamReader(webResponse.GetResponseStream()))
					                    {
					                        response = streamReader.ReadToEnd();
					                    }
					                }
					            }
					            catch (Exception e)
					            {
					                Console.WriteLine(e.Message);
					                Console.ReadLine();
					            }

					            return response;
					        }

		   			

C# - Acuse Cancelación

La siguiente función describe la invocación al servicio de FacE Timbre para solicitar el acuse de cancelación


						public static String AcuseCancelacion(String token, String anioMes, String uuid)
				        {

				            String contentXML = "";
				            String response = "";
				            try
				            {


				                contentXML += "";
				                contentXML += "";
				                contentXML += "";
				                contentXML += "";
				                contentXML += "" + token + "";
				                contentXML += "" + anioMes + "";
				                contentXML += "" + uuid + "";
				                contentXML += "";
				                contentXML += "";
				                contentXML += "";

				                Uri uri = new Uri("https://face-timbre.masnegocio.com/mn-pac-servicios/servicios");

				                WebRequest webRequest = WebRequest.Create(uri);
				                webRequest.ContentType = "text/xml;charset=UTF-8";
				                webRequest.ContentLength = contentXML.Length;
				                webRequest.Headers.Add("SOAPAction", "http://www.masnegocio.com/servicios/acuseCancelacion");
				                webRequest.Method = "POST";

				                webRequest.GetRequestStream().Write(Encoding.UTF8.GetBytes(contentXML), 0, contentXML.Length);

				                using (WebResponse webResponse = webRequest.GetResponse())
				                {
				                    using (StreamReader streamReader = new StreamReader(webResponse.GetResponseStream()))
				                    {
				                        response = streamReader.ReadToEnd();
				                    }
				                }
				            }
				            catch (Exception e)
				            {
				                Console.WriteLine(e.Message);
				                Console.ReadLine();
				            }

				            return response;
				        }


		   			

C# - Emitir Retención

La siguiente función describe la invocación al servicio de FacE Timbre para solicitar la emisión de una retención

							 public static String EmitirRetencion(String token, String xmlB64, String noControl)
					        {
					            String contentXML = "";
					            String response = "";
					            try
					            {
					                contentXML += "";
					                contentXML += "";
					                contentXML += "";
					                contentXML += "";
					                contentXML += "" + token + "";

					                if (!String.IsNullOrEmpty(noControl))
					                    contentXML += "" + noControl + "";

					                contentXML += "" + xmlB64 + "";
					                contentXML += "";
					                contentXML += "";
					                contentXML += "";

					                Uri uri = new Uri("https://face-timbre.masnegocio.com/mn-pac-servicios/servicios");

					                WebRequest webRequest = WebRequest.Create(uri);
					                webRequest.ContentType = "text/xml;charset=UTF-8";
					                webRequest.ContentLength = contentXML.Length;
					                webRequest.Headers.Add("SOAPAction", "http://www.masnegocio.com/servicios/retencionEmision");
					                webRequest.Method = "POST";

					                webRequest.GetRequestStream().Write(Encoding.UTF8.GetBytes(contentXML), 0, contentXML.Length);
					                using (WebResponse webResponse = webRequest.GetResponse())
					                {
					                    using (StreamReader streamReader = new StreamReader(webResponse.GetResponseStream()))
					                    {
					                        response = streamReader.ReadToEnd();
					                    }
					                }
					            }
					            catch (Exception e)
					            {

					                Console.Write(e.Message);
					                Console.ReadLine();
					            }
					            return response;
					        }

		   			

C# - Cancelar Retención

La siguiente función describe la invocación al servicio de FacE Timbre para solicitar la cancelación de una retención

							public static String CancelarRetencion(String token, String xmlB64, String liberarNoControl)
					        {
					            String contentXML = "";
					            String response = "";
					            try
					            {


					                contentXML += "";
					                contentXML += "";
					                contentXML += "";
					                contentXML += "";
					                contentXML += "" + token + "";
					                contentXML += "" + xmlB64 + "";

					                if (!String.IsNullOrEmpty(liberarNoControl))
					                    contentXML += "" + liberarNoControl + "";

					                contentXML += "";
					                contentXML += "";
					                contentXML += "";

					                Uri uri = new Uri("https://face-timbre.masnegocio.com/mn-pac-servicios/servicios");

					                WebRequest webRequest = WebRequest.Create(uri);

					                webRequest.ContentType = "text/xml;charset=UTF-8";
					                webRequest.ContentLength = contentXML.Length;

					                webRequest.Headers.Add("SOAPAction", "http://www.masnegocio.com/servicios/retencionCancelacion");
					                webRequest.Method = "POST";

					                webRequest.GetRequestStream().Write(Encoding.UTF8.GetBytes(contentXML), 0, contentXML.Length);

					                using (WebResponse webResponse = webRequest.GetResponse())
					                {
					                    using (StreamReader streamReader = new StreamReader(webResponse.GetResponseStream()))
					                    {
					                        response = streamReader.ReadToEnd();
					                    }
					                }
					            }
					            catch (Exception e)
					            {
					                Console.WriteLine(e.Message);
					                Console.ReadLine();
					            }

					            return response;
					        }


		   			

C# - Validación

La siguiente función describe la invocación al servicio de FacE Timbre para la validación

						public static String Validacion(String token, String xmlB64, String tipoRespuesta)
				        {
				            String contentXML = "";
				            String response = "";
				            try
				            {


				                contentXML += "";
				                contentXML += "";
				                contentXML += "";
				                contentXML += "";
				                contentXML += "" + token + "";
				                contentXML += "" + xmlB64 + "";
				                contentXML += "" + tipoRespuesta + "";
				                contentXML += "";
				                contentXML += "";
				                contentXML += "";

				                Uri uri = new Uri("https://face-timbre.masnegocio.com/mn-pac-servicios/servicios");

				                WebRequest webRequest = WebRequest.Create(uri);

				                webRequest.ContentType = "text/xml;charset=UTF-8";
				                webRequest.ContentLength = contentXML.Length;

				                webRequest.Headers.Add("SOAPAction", "http://www.masnegocio.com/servicios/validacion");
				                webRequest.Method = "POST";

				                webRequest.GetRequestStream().Write(Encoding.UTF8.GetBytes(contentXML), 0, contentXML.Length);

				                using (WebResponse webResponse = webRequest.GetResponse())
				                {
				                    using (StreamReader streamReader = new StreamReader(webResponse.GetResponseStream()))
				                    {
				                        response = streamReader.ReadToEnd();
				                    }
				                }
				            }
				            catch (Exception e)
				            {
				                Console.WriteLine(e.Message);
				                Console.ReadLine();
				            }

				            return response;
				        }


		   			

C# - Generación PDF

La siguiente función describe la invocación al servicio de FacE Timbre para la generación de PDF

						public static String GeneracionPdf(String token, String xmlB64, String plantillaPDF)
				        {
				            String contentXML = "";
				            String response = "";
				            try
				            {


				                contentXML += "";
				                contentXML += "";
				                contentXML += "";
				                contentXML += "";
				                contentXML += "" + token + "";
				                contentXML += "" + xmlB64 + "";
				                contentXML += "" + plantillaPDF + "";
				                contentXML += "";
				                contentXML += "";
				                contentXML += "";


				                Uri uri = new Uri("https://face-timbre.masnegocio.com/mn-pac-servicios/servicios");

				                WebRequest webRequest = WebRequest.Create(uri);

				                webRequest.ContentType = "text/xml;charset=UTF-8";
				                webRequest.ContentLength = contentXML.Length;

				                webRequest.Headers.Add("SOAPAction", "http://www.masnegocio.com/servicios/pdf/generacion");
				                webRequest.Method = "POST";

				                webRequest.GetRequestStream().Write(Encoding.UTF8.GetBytes(contentXML), 0, contentXML.Length);

				                using (WebResponse webResponse = webRequest.GetResponse())
				                {
				                    using (StreamReader streamReader = new StreamReader(webResponse.GetResponseStream()))
				                    {
				                        response = streamReader.ReadToEnd();
				                    }
				                }
				            }
				            catch (Exception e)
				            {
				                Console.WriteLine(e.Message);
				                Console.ReadLine();
				            }

				            return response;
				        }


		   			

C# - Reenvio de correo

La siguiente función describe la invocación al servicio de FacE Timbre para el reenvio de correo

						public static String ReenvioCorreo(String xmlB64, String correoElectronico, String plantillaPDF, String plantillaMail)
				        {
				            String contentXML = "";
				            String response = "";
				            try
				            {


				                contentXML += "";
				                contentXML += "";
				                contentXML += "";
				                contentXML += "";
				                contentXML += "" + xmlB64 + "";
				                contentXML += "" + correoElectronico + "";

				                if (!String.IsNullOrEmpty(plantillaPDF))
				                    contentXML += "" + plantillaPDF + "";


				                if (!String.IsNullOrEmpty(plantillaMail))
				                {
				                    contentXML += "" + plantillaMail + "";
				                }

				                contentXML += "";
				                contentXML += "";
				                contentXML += "";


				                Uri uri = new Uri("https://face-timbre.masnegocio.com/mn-pac-servicios/servicios");

				                WebRequest webRequest = WebRequest.Create(uri);

				                webRequest.ContentType = "text/xml;charset=UTF-8";
				                webRequest.ContentLength = contentXML.Length;

				                webRequest.Headers.Add( "SOAPAction", "http://www.masnegocio.com/servicios/mail/reenvio");
				                webRequest.Method = "POST";

				                webRequest.GetRequestStream().Write(Encoding.UTF8.GetBytes(contentXML), 0, contentXML.Length);

				                using (WebResponse webResponse = webRequest.GetResponse())
				                {
				                    using (StreamReader streamReader = new StreamReader(webResponse.GetResponseStream()))
				                    {
				                        response = streamReader.ReadToEnd();
				                    }
				                }
				            }
				            catch (Exception e)
				            {
				                Console.WriteLine(e.Message);
				                Console.ReadLine();
				            }

				            return response;
				        }


		   			

Java - Emitir

La siguiente función describe la invocación al servicio de FacE Timbre para solicitar el timbrado de un CFDi


						public static  String emitir(String token, String xmlB64, String noControl, String correoElectronico, String plantillaMail, String plantillaPDF )
						    {
						        String uri = "https://face-timbre.masnegocio.com/mn-pac-servicios/servicios";
						        String contentXML = "";
						        String response = null;
						        HttpURLConnection connection = null;

						        contentXML += "\n";
						        contentXML += "";
						        contentXML += "";
						        contentXML += "";
						        contentXML += "" + token + "";




						        if (noControl != null && noControl.length() > 0) {
						            contentXML += "" + noControl + "";
						        }

						        contentXML += "" + correoElectronico + "\n";
						        contentXML += "" + plantillaMail + "\n";
						        contentXML += "" + plantillaPDF + "\n";
						        contentXML += "" + xmlB64 + "\n";
						        contentXML += "\n";
						        contentXML += "\n";
						        contentXML += "\n";

						        try
						        {
						            URL url = new URL(uri);

						            connection = (HttpURLConnection)url.openConnection();
						            connection.setRequestMethod("POST");
						            connection.setRequestProperty("Content-Type", "text/xml;charset=UTF-8");
						            connection.setDoOutput(true);

						            connection.setRequestProperty("SOAPAction", "http://www.masnegocio.com/servicios/emision");


						            if (contentXML != null)
						            {
						                connection.setRequestProperty("Content-Length", Integer.toString(contentXML.length()));
						                Writer wr = new OutputStreamWriter(connection.getOutputStream(), StandardCharsets.UTF_8);
						                wr.write(contentXML);
						                wr.flush();
						                wr.close();
						            }

						            int responseCode = connection.getResponseCode();

						            if(responseCode == 200 || responseCode == 401 || responseCode == 409)
						            {
						                StringBuffer buffer = new StringBuffer();
						                BufferedReader reader;

						                if (responseCode == 200)
						                {
						                    reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
						                }
						                else
						                {
						                    reader = new BufferedReader(new InputStreamReader(connection.getErrorStream(), "UTF-8"));
						                }

						                String linea;

						                while((linea = reader.readLine()) != null)
						                {
						                    buffer.append(linea);
						                }

						                response = buffer.toString();
						            } else if( responseCode == 400 )
						            {
						                throw new RuntimeException("Error 400: Bad Request");
						            } else
						            {
						                throw new RuntimeException("Error: ResponseCode = " + responseCode);
						            }
						        }
						        catch(Exception e)
						        {
						            response = null;
						            throw new RuntimeException( e.getMessage() );
						        }

						        return response;
						    }
		   		

Java - Cancelar

La siguiente función describe la invocación al servicio de FacE Timbre para solicitar la cancelación de un CFDi



									public static String cancelar(String token,String xmlB64, String liberarNoControl){
									    String uri = "https://face-timbre.masnegocio.com/mn-pac-servicios/servicios";
									    String contentXML = "";
									    String response = null;
									    HttpURLConnection connection = null;




									    contentXML += "";
									    contentXML += "";
									    contentXML += "";
									    contentXML += "";
									    contentXML += "" + token + "";
									    contentXML += "" + xmlB64 + "";
									    contentXML += "" + liberarNoControl + "";
									    contentXML += "";
									    contentXML += "";
									    contentXML += "";


									    try
									    {
									        URL url = new URL(uri);

									        connection = (HttpURLConnection)url.openConnection();
									        connection.setRequestMethod("POST");
									        connection.setRequestProperty("Content-Type", "text/xml;charset=UTF-8");
									        connection.setDoOutput(true);
									        connection.setRequestProperty("SOAPAction", "http://www.masnegocio.com/servicios/cancelacion");

									        if (contentXML != null)
									        {
									            connection.setRequestProperty("Content-Length", Integer.toString(contentXML.length()));
									            Writer wr = new OutputStreamWriter(connection.getOutputStream(), StandardCharsets.UTF_8);
									            wr.write(contentXML);
									            wr.flush();
									            wr.close();
									        }

									        int responseCode = connection.getResponseCode();

									        if(responseCode == 200 || responseCode == 401 || responseCode == 409)
									        {
									            StringBuffer buffer = new StringBuffer();
									            BufferedReader reader;

									            if (responseCode == 200)
									            {
									                reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
									            }
									            else
									            {
									                reader = new BufferedReader(new InputStreamReader(connection.getErrorStream(), "UTF-8"));
									            }

									            String linea;

									            while((linea = reader.readLine()) != null)
									            {
									                buffer.append(linea);
									            }

									            response = buffer.toString();
									        } else if( responseCode == 400 )
									        {
									            throw new RuntimeException("Error 400: Bad Request");
									        } else
									        {
									            throw new RuntimeException("Error: ResponseCode = " + responseCode);
									        }
									    }
									    catch(Exception e)
									    {
									        response = null;
									        throw new RuntimeException( e.getMessage() );
									    }

									    return response;
									}
		   		

Java - Acuse Emisión

La siguiente función describe la invocación al servicio de FacE Timbre para solicitar el acuse de emisión de un CFDi


						public static String acuseEmision(String token,String anioMes, String uuid)
						{
						    String uri = "https://face-timbre.masnegocio.com/mn-pac-servicios/servicios";
						    String contentXML = "";
						    String response = null;
						    HttpURLConnection connection = null;

						    contentXML += "";
						    contentXML += "";
						    contentXML += "";
						    contentXML += "";
						    contentXML += "" + token + "";
						    contentXML += "" + anioMes + "";
						    contentXML += "" + uuid + "";
						    contentXML += "";
						    contentXML += "";
						    contentXML += "";

						    try
						    {
						        URL url = new URL(uri);

						        connection = (HttpURLConnection)url.openConnection();
						        connection.setRequestMethod("POST");
						        connection.setRequestProperty("Content-Type", "text/xml;charset=UTF-8");
						        connection.setDoOutput(true);
						        connection.setRequestProperty("SOAPAction", "http://www.masnegocio.com/servicios/acuseEmision");

						        if (contentXML != null)
						        {
						            connection.setRequestProperty("Content-Length", Integer.toString(contentXML.length()));
						            Writer wr = new OutputStreamWriter(connection.getOutputStream(), StandardCharsets.UTF_8);
						            wr.write(contentXML);
						            wr.flush();
						            wr.close();
						        }

						        int responseCode = connection.getResponseCode();
						        if(responseCode == 200 || responseCode == 401 || responseCode == 409)
						        {

						            StringBuffer buffer = new StringBuffer();
						            BufferedReader reader;
						            if (responseCode == 200)
						            {
						                reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
						            }
						            else
						                reader = new BufferedReader(new InputStreamReader(connection.getErrorStream(), "UTF-8"));

						            String linea;
						            while((linea = reader.readLine()) != null)
						            {
						                buffer.append(linea);
						            }

						            response = buffer.toString();
						        } else if( responseCode == 400 )
						        {
						            throw new RuntimeException("Error 400: Bad Request");
						        } else
						        {
						            throw new RuntimeException("Error: ResponseCode = " + responseCode);
						        }
						    }
						    catch(Exception e)
						    {
						        response = null;
						        throw new RuntimeException( e.getMessage() );
						    }


						    return response;
						}

		   		

Java - Acuse Cancelación

La siguiente función describe la invocación al servicio de FacE Timbre para solicitar el acuse de cancelación de un CFDi


						public static String acuseCancelacion(String token,String anioMes, String uuid)
						 {
						     String uri = "https://face-timbre.masnegocio.com/mn-pac-servicios/servicios";
						     String contentXML = "";
						     String response = null;
						     HttpURLConnection connection = null;

						     contentXML += "";
						     contentXML += "";
						     contentXML += "";
						     contentXML += "";
						     contentXML += "" + token + "";
						     contentXML += "" + anioMes + "";
						     contentXML += "" + uuid + "";
						     contentXML += "";
						     contentXML += "";
						     contentXML += "";
						     try
						     {
						         URL url = new URL(uri);

						         connection = (HttpURLConnection)url.openConnection();
						         connection.setRequestMethod("POST");
						         connection.setRequestProperty("Content-Type", "text/xml;charset=UTF-8");
						         connection.setDoOutput(true);
						         connection.setRequestProperty("SOAPAction", "http://www.masnegocio.com/servicios/acuseCancelacion");

						         if (contentXML != null)
						         {
						             connection.setRequestProperty("Content-Length", Integer.toString(contentXML.length()));
						             Writer wr = new OutputStreamWriter(connection.getOutputStream(), StandardCharsets.UTF_8);
						             wr.write(contentXML);
						             wr.flush();
						             wr.close();
						         }

						         int responseCode = connection.getResponseCode();
						         if(responseCode == 200 || responseCode == 401 || responseCode == 409)
						         {

						             StringBuffer buffer = new StringBuffer();
						             BufferedReader reader;
						             if (responseCode == 200)
						             {
						                 reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
						             }
						             else
						                 reader = new BufferedReader(new InputStreamReader(connection.getErrorStream(), "UTF-8"));

						             String linea;
						             while((linea = reader.readLine()) != null)
						             {
						                 buffer.append(linea);
						             }

						             response = buffer.toString();
						         } else if( responseCode == 400 )
						         {
						             throw new RuntimeException("Error 400: Bad Request");
						         } else
						         {
						             throw new RuntimeException("Error: ResponseCode = " + responseCode);
						         }
						     }
						     catch(Exception e)
						     {
						         response = null;
						         throw new RuntimeException( e.getMessage() );
						     }

						     return response;
						 }

		   		

Java - Emitir Retención

La siguiente función describe la invocación al servicio de FacE Timbre para solicitar la emisión de una retención


								public static String emitirRetencion(String token, String xmlB64, String noControl)
								{
							        String uri = "https://face-timbre.masnegocio.com/mn-pac-servicios/servicios";
							        String contentXML = "";
							        String response = null;
							        HttpURLConnection connection = null;

							        contentXML += "";
							        contentXML += "";
							        contentXML += "";
							        contentXML += "";
							        contentXML += "" + token + "";

							        if (noControl != null && noControl.length() > 0) {
							            contentXML += "" + noControl + "";
							        }

							        contentXML += "" + xmlB64 + "";
							        contentXML += "";
							        contentXML += "";
							        contentXML += "";

							        try
							        {
							            URL url = new URL(uri);
							            connection = (HttpURLConnection)url.openConnection();
							            connection.setRequestMethod("POST");
							            connection.setRequestProperty("Content-Type", "text/xml;charset=UTF-8");
							            connection.setDoOutput(true);
							            connection.setRequestProperty("SOAPAction", "http://www.masnegocio.com/servicios/retencionEmision");

							            if (contentXML != null)
							            {
							                connection.setRequestProperty("Content-Length", Integer.toString(contentXML.length()));
							                Writer wr = new OutputStreamWriter(connection.getOutputStream(), StandardCharsets.UTF_8);
							                wr.write(contentXML);
							                wr.flush();
							                wr.close();
							            }


							            int responseCode = connection.getResponseCode();
							            if(responseCode == 200 || responseCode == 401 || responseCode == 409 )
							            {
							                StringBuffer buffer = new StringBuffer();
							                BufferedReader reader;

							                if (responseCode == 200)
							                {
							                    reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
							                }
							                else
							                {
							                    reader = new BufferedReader(new InputStreamReader(connection.getErrorStream(), "UTF-8"));
							                }

							                String linea;
							                while((linea = reader.readLine()) != null)
							                {
							                    buffer.append(linea);
							                }

							                response = buffer.toString();

							            } else if( responseCode == 400 )
							                throw new RuntimeException("Error 400: Bad Request");
							             else
							                throw new RuntimeException("Error: ResponseCode = " + responseCode);

							        }
							        catch(Exception e)
							        {
							            response = null;
							            throw new RuntimeException( e.getMessage() );
							        }

							        return response;
								}
		   		

Java - Cancelar Retención

La siguiente función describe la invocación al servicio de FacE Timbre para solicitar la cancelación de una retención


								public static String cancelarRetencion(String token,String xmlB64, String liberarNoControl)
								{
								    String uri = "https://face-timbre.masnegocio.com/mn-pac-servicios/servicios";
								    String contentXML = "";
								    String response = null;
								    HttpURLConnection connection = null;

								    contentXML += "";
								    contentXML += "";
								    contentXML += "";
								    contentXML += "";
								    contentXML += "" + token + "";
								    contentXML += "" + xmlB64 + "";
								    contentXML += "" + liberarNoControl + "";
								    contentXML += "";
								    contentXML += "";
								    contentXML += "";


								    try
								    {
								        URL url = new URL(uri);

								        connection = (HttpURLConnection)url.openConnection();
								        connection.setRequestMethod("POST");
								        connection.setRequestProperty("Content-Type", "text/xml;charset=UTF-8");
								        connection.setDoOutput(true);
								        connection.setRequestProperty("SOAPAction", "http://www.masnegocio.com/servicios/retencionCancelacion");

								        if (contentXML != null)
								        {
								            connection.setRequestProperty("Content-Length", Integer.toString(contentXML.length()));
								            Writer wr = new OutputStreamWriter(connection.getOutputStream(), StandardCharsets.UTF_8);
								            wr.write(contentXML);
								            wr.flush();
								            wr.close();
								        }

								        int responseCode = connection.getResponseCode();
								        if(responseCode == 200 || responseCode == 401 || responseCode == 409)
								        {

								            StringBuffer buffer = new StringBuffer();
								            BufferedReader reader;
								            if (responseCode == 200)
								            {
								                reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
								            }
								            else
								                reader = new BufferedReader(new InputStreamReader(connection.getErrorStream(), "UTF-8"));

								            String linea;
								            while((linea = reader.readLine()) != null)
								            {
								                buffer.append(linea);
								            }

								            response = buffer.toString();
								        } else if( responseCode == 400 )
								        {
								            throw new RuntimeException("Error 400: Bad Request");
								        } else
								        {
								            throw new RuntimeException("Error: ResponseCode = " + responseCode);
								        }
								    }
								    catch(Exception e)
								    {
								        response = null;
								        throw new RuntimeException( e.getMessage() );
								    }

								    return response;
								}
		   		

Java - Validación

La siguiente función describe la invocación al servicio de FacE Timbre para la validación


								public static String validacion(String token,String xmlB64, String tipoRespuesta)
								{
								    String uri = "https://face-timbre.masnegocio.com/mn-pac-servicios/servicios";
								    String contentXML = "";
								    String response = null;
								    HttpURLConnection connection = null;

								    contentXML += "";
								    contentXML += "";
								    contentXML += "";
								    contentXML += "";
								    contentXML += "" + token + "";
								    contentXML += "" + xmlB64 + "";
								    contentXML += "" + tipoRespuesta + "";
								    contentXML += "";
								    contentXML += "";
								    contentXML += "";


								    try
								    {
								        URL url = new URL(uri);

								        connection = (HttpURLConnection)url.openConnection();
								        connection.setRequestMethod("POST");
								        connection.setRequestProperty("Content-Type", "text/xml;charset=UTF-8");
								        connection.setDoOutput(true);
								        connection.setRequestProperty("SOAPAction", "http://www.masnegocio.com/servicios/validacion");

								        if (contentXML != null)
								        {
								            connection.setRequestProperty("Content-Length", Integer.toString(contentXML.length()));
								            Writer wr = new OutputStreamWriter(connection.getOutputStream(), StandardCharsets.UTF_8);
								            wr.write(contentXML);
								            wr.flush();
								            wr.close();
								        }

								        int responseCode = connection.getResponseCode();
								        if(responseCode == 200 || responseCode == 401 || responseCode == 409)
								        {

								            StringBuffer buffer = new StringBuffer();
								            BufferedReader reader;
								            if (responseCode == 200)
								            {
								                reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
								            }
								            else
								                reader = new BufferedReader(new InputStreamReader(connection.getErrorStream(), "UTF-8"));

								            String linea;
								            while((linea = reader.readLine()) != null)
								            {
								                buffer.append(linea);
								            }

								            response = buffer.toString();
								        } else if( responseCode == 400 )
								        {
								            throw new RuntimeException("Error 400: Bad Request");
								        } else
								        {
								            throw new RuntimeException("Error: ResponseCode = " + responseCode);
								        }
								    }
								    catch(Exception e)
								    {
								        response = null;
								        throw new RuntimeException( e.getMessage() );
								    }

								    return response;
								}
		   		

Java - Generación PDF

La siguiente función describe la invocación al servicio de FacE Timbre para la generación de PDF


								public static String generacionPdf(String token,String xmlB64, String plantillaPDF)
								{
								    String uri = "https://face-timbre.masnegocio.com/mn-pac-servicios/servicios";
								    String contentXML = "";
								    String response = null;
								    HttpURLConnection connection = null;

								    contentXML += "";
								    contentXML += "";
								    contentXML += "";
								    contentXML += "";
								    contentXML += "" + token + "";
								    contentXML += "" + xmlB64 + "";
								    contentXML += "" + plantillaPDF + "";
								    contentXML += "";
								    contentXML += "";
								    contentXML += "";


								    try
								    {
								        URL url = new URL(uri);

								        connection = (HttpURLConnection)url.openConnection();
								        connection.setRequestMethod("POST");
								        connection.setRequestProperty("Content-Type", "text/xml;charset=UTF-8");
								        connection.setDoOutput(true);
								        connection.setRequestProperty("SOAPAction", "http://www.masnegocio.com/servicios/pdf/generacion");

								        if (contentXML != null)
								        {
								            connection.setRequestProperty("Content-Length", Integer.toString(contentXML.length()));
								            Writer wr = new OutputStreamWriter(connection.getOutputStream(), StandardCharsets.UTF_8);
								            wr.write(contentXML);
								            wr.flush();
								            wr.close();
								        }

								        int responseCode = connection.getResponseCode();
								        if(responseCode == 200 || responseCode == 401 || responseCode == 409)
								        {

								            StringBuffer buffer = new StringBuffer();
								            BufferedReader reader;
								            if (responseCode == 200)
								            {
								                reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
								            }
								            else
								                reader = new BufferedReader(new InputStreamReader(connection.getErrorStream(), "UTF-8"));

								            String linea;
								            while((linea = reader.readLine()) != null)
								            {
								                buffer.append(linea);
								            }

								            response = buffer.toString();
								        } else if( responseCode == 400 )
								        {
								            throw new RuntimeException("Error 400: Bad Request");
								        } else
								        {
								            throw new RuntimeException("Error: ResponseCode = " + responseCode);
								        }
								    }
								    catch(Exception e)
								    {
								        response = null;
								        throw new RuntimeException( e.getMessage() );
								    }

								    return response;
								}
		   		

Java - Reenvio de correo

La siguiente función describe la invocación al servicio de FacE Timbre para el reenvio de correo


						public static String reenvioCorreo(String xmlB64, String correoElectronico, String plantillaPDF, String plantillaMail)
						{
						    String uri = "https://face-timbre.masnegocio.com/mn-pac-servicios/servicios";
						    String contentXML = "";
						    String response = null;
						    HttpURLConnection connection = null;

						    contentXML += "";
						    contentXML += "";
						    contentXML += "";
						    contentXML += "";
						    contentXML += "" + xmlB64 + "";
						    contentXML += "" + correoElectronico + "";

						    if (plantillaPDF != null && plantillaPDF.length() > 0) {
						    	contentXML += "" + plantillaPDF + "";
					        }

						    if (plantillaMail != null && plantillaMail.length() > 0) {
						    	contentXML += "" + plantillaMail + "";
						    }

						    contentXML += "";
						    contentXML += "";
						    contentXML += "";


						    try
						    {
						        URL url = new URL(uri);

						        connection = (HttpURLConnection)url.openConnection();
						        connection.setRequestMethod("POST");
						        connection.setRequestProperty("Content-Type", "text/xml;charset=UTF-8");
						        connection.setDoOutput(true);
						        connection.setRequestProperty("SOAPAction", "http://www.masnegocio.com/servicios/mail/reenvio");

						        if (contentXML != null)
						        {
						            connection.setRequestProperty("Content-Length", Integer.toString(contentXML.length()));
						            Writer wr = new OutputStreamWriter(connection.getOutputStream(), StandardCharsets.UTF_8);
						            wr.write(contentXML);
						            wr.flush();
						            wr.close();
						        }

						        int responseCode = connection.getResponseCode();
						        if(responseCode == 200 || responseCode == 401 || responseCode == 409)
						        {

						            StringBuffer buffer = new StringBuffer();
						            BufferedReader reader;
						            if (responseCode == 200)
						            {
						                reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
						            }
						            else
						                reader = new BufferedReader(new InputStreamReader(connection.getErrorStream(), "UTF-8"));

						            String linea;
						            while((linea = reader.readLine()) != null)
						            {
						                buffer.append(linea);
						            }

						            response = buffer.toString();
						        } else if( responseCode == 400 )
						        {
						            throw new RuntimeException("Error 400: Bad Request");
						        } else
						        {
						            throw new RuntimeException("Error: ResponseCode = " + responseCode);
						        }
						    }
						    catch(Exception e)
						    {
						        response = null;
						        throw new RuntimeException( e.getMessage() );
						    }

						    return response;
						}

		   		

GENERAL


¿Qué es FacE timbre?

Es el servicio de certificación de Comprobantes Fiscales Digitales de acuerdo a los lineamientos definidos por el Servicio de Administración Tributaria (SAT) en México que ofrece MasNegocio desde el año 2011 en que fue autorizado por el SAT como Proveedor Certificado de CFDI con el número 55261

¿Cómo funciona FacE timbre?

ERRORES


Codigo Error
1001 Token invalido
1002 Error en autorización
1003 No se pudo establecer comunicación con la base de datos
1004 Faltan parametros en la operación a ejecutar
2001 El documento no es un XML válido
2002 El documento no cumple con la estructura de un CFDI : [?]
2003 La fecha de emisión no puede ser anterior al 1 de enero del 2012
2004 La fecha de emisión debe estar dentro de la vigencia del CSD emisor
2005 La llave utilizada para sellar debe ser CSD no FIEL
2006 Sello inválido
2007 El RFC del emisor no corresponde al CSD
2008 Factura sin timbre fiscal
2009 La fecha de timbrado excede las 72 horas sobre la fecha de emisión
2010 El número de certificado PAC no corresponde a un PAC autorizado
2011 La fecha de timbrado debe estar dentro de la vigencia del certificado SAT de timbrado
2012 Timbre fiscal inválido
2013 Error en certificado : [?]
2014 Sello SAT inválido
2015 El documento no es un XML válido : ?
2016 El documento contiene al menos una addenda sin el atributo schemaLocation : ?
2017 El RFC del receptor no cumple con el estandar de RFC del SAT
2018 La fecha de emisión solo puede ser 5 minutos mayor a la de timbrado
2019 Se detectaron errores en la addenda: [?]
4001 Error al crear un usuario
4002 Ya existe un usuario con el id [?]
4003 Usuario creado exitosamente
4004 Error de autenticación
4010 El certificado que intenta cargar ya existe en el sistema
4011 Error al intentar cargar el certificado
4012 Certificado cargado exitosamente
4013 Token invalido
4014 No se encuentra el numero de certificado en la LCO
4015 El certificado que intenta cargar esta revocado en la LCO
4016 El certificado que intenta cargar esta cancelado en la LCO
4017 El certificado que intenta cargar tiene un estado desconocido en la LCO
4018 El certificado que intenta cargar pertenece al RFC [?] y no al RFC al cual lo desea asociar
4020 Error al intentar iniciar sesión, verifique su usuario y contraseña
4021 Usuario no encontrado
4022 El usuario [?] ha sido bloqueado por superar el número de intentos de inicio de sesión hasta el dia [?] a las [?]
4023 Password incorrecto, le quedan [?] intentos
4024 Usuario autenticado correctamente
4025 Su contraseña ha expirado, debe actualizarla para poder entrar al sistema
4030 El certificado que intenta eliminar no existe en el sistema
4031 Error al intentar eliminar el certificado
4032 Certificado eliminado exitosamente
4033 Token invalido
4040 No se puede generar el CFDI, falta información
4041 Error en el sellado de información, se requiere el número de certificado y el RFC del emisor
4042 Error en el sellado de información, no se encontro el certificado en el sistema
4043 Error en el sellado de información, no se encuentra el numero de certificado en la LCO
4044 Error en el sellado de información, el certificado a usar esta revocado en la LCO
4045 Error en el sellado de información, el certificado a usar esta cancelado en la LCO
4046 Error en el sellado de información, el certificado a usar tiene un estado desconocido en la LCO
4047 Ocurrió un error al sellar la cadena original : ?
4048 Ocurrió un error al obtener la llave privada para sellar la cadena original
4049 Error de autenticación
4050 Token invalido
4051 Datos de certificado descargados exitosamente
4052 Error al obtener la cedena origina l : ?
4053 Error al obtener la cedena original del TFD : ?
4054 No se encuentra el numero de certificado en la LCO
4055 El certificado a usar esta revocado en la LCO
4056 El certificado a usar esta cancelado en la LCO
4057 El certificado a usar tiene un estado desconocido en la LCO
4058 El certificado a usar tiene fecha de inicio posterior a la fecha de emisión
4059 El comprobante tiene ya el complemento de TFD
4060 Tipo de solicitud no definido, se debe especificar ya sea JSON o XML
4061 Debe especificar el contenido del XML en base 64
4101 Error en el formato de respuesta del HSM : ?
4102 No se pudo conectar al HSM en IP ? puerto ? en ? intentos
4103 Ocurrió un error en el proceso de firmado del HSML : ?
4111 Ocurrio un error al validar el número de control del comprobante : ?
4112 Número de control encontrado
4113 Número de control no encontrado
4114 Error al intentar validar el número de control
4115 Token invalido
4120 Ocurrio un error al almacenar el comprobante
4121 Token inválido
4122 Comprobante almacenado exitosamente
4123 Ocurrio un error al almacenar el comprobante : ?
4130 Error al intentar validar el certificado
4131 Certificado válido
4132 No se encuentra el número de certificado en la LCO
4133 El certificado esta revocado en la LCO
4134 El certificado esta cancelado en la LCO
4135 El certificado tiene un estado desconocido en la LCO
4136 Ocurrio un errror al validar el certificado en la LCO : ?
4140 Ocurrio un error al almacenar el comprobante de validación
4141 Token inválido
4142 Comprobante de validación almacenado exitosamente
4143 Ocurrio un error al almacenar el comprobante de validación : ?
4150 Ocurrio un error al realizar la solicitud de cancelación
4151 Token inválido
4152 Solicitud de cancelación encolada exitosamente
4153 Ocurrio un error al crear la solicitud de cancelación : ?
4154 Tipo de petición incorrecta, debe ser XML o JSON
4155 Falta parametro de peticion de cancelacion XML en base 64
4160 Ocurrio un error al almacenar la solicitud de cancelacion
4161 Token inválido
4162 Solicitud de cancelación almacenada exitosamente
4163 Ocurrio un error al almacenar la solicitud de cancelación : ?
4164 No se pudo registrar la solicitud de la cancelacion debido a que el CFDI no ha sido entregado al SAT
4165 Solicitud de cancelación registrada exitosamente
4166 No se pudo registrar la solicitud de la cancelacion debido a que el CFDI ya ha sido cancelado
4167 No se pudo registrar la solicitud de la cancelacion debido a que el CFDI esta en proceso de cancelación
4170 Ocurrio un error al ejecutar el procedimiento almacenado SP_ReporteTotales_CFDI32
4171 Token inválido
4172 Token inválido
4173 Operación ejecutada exitosamente
4174 Ocurrió un error al generar el reporte de totales de CFDI : ?
4180 Ocurrió un error al generar el reporte de detalles de ?
4181 Ocurrió un error al generar el reporte de detalles de ? : ?
4190 Ocurrió un error al generar el acuse de ?
4191 Ocurrió un error al generar el acuse de ? : ?
4192 Acuse no encontrado
4200 Ocurrió un error al consultar el documento de ?
4201 Ocurrió un error al consultar el documento de ? : ?
4202 Documento no encontrado
4210 Token invalido
4211 Empresa creada exitosamente
4212 Error al ejecutar el procedimiento almacenado SP_CrearEmpresa
4213 Error al crear la empresa
4214 Error al crear la empresa : ?
4220 Token invalido
4221 Empresas consultadas exitosamente
4222 Error al consultar las empresas : ?
4230 Error SAT 180 en complemento INE, "Debe de existir el atributo ine:TipoComite"
4231 Error SAT 181 en complemento INE, "Se debe registrar al menos un elemento ine:Entidad y en las entidades que se registren debe existir el atributo ine:Entidad:Ambito"
4232 Error SAT 182 en complemento INE, "No debe existir el artibuto ine:TipoComite"
4233 Error SAT 183 en complemento INE, "No debe existir el atributo ine:IdContabilidad"
4234 Error SAT 184 en complemento INE, "No debe existir ningun elemento ine:Entidad"
4235 Error SAT 185 en complemento INE, "No debe existir el atributo ine:IdContabilidad"
4236 Error SAT 186 en complemento INE, "Debe existir al menos un elemento ine:Entidad y en cada entidad que se registro no debe existir el atributo ine:Entidad:Ambito"
4237 Error SAT 187 en complemento INE, "No se puede repetir la combinación (ine:Entidad:ClaveEntidad, ine:Entidad:Ambito)"
4240 Error al ejecutar el procedimiento almacenado SP_CambiarPassword
4241 Token invalido
4242 Token invalido
4243 El usuario esta bloqueado por lo que no puede actualizar su contraseña
4244 La contraseña ya ha sido usada, intente otra
4245 Contraseña actualizada exitosamente
4246 Ocurrió un error al actualizar la contraseña : ?
4250 Error al ejecutar el procedimiento almacenado SP_RestablecerPassword
4251 Token invalido
4252 Token invalido
4253 El usuario esta bloqueado por lo que no puede restablecer su contraseña
4254 El usuario no existe en el sistema
4256 Usuario originador distinto en usuario a restablecer y token
4257 Ocurrió un error al restablecer la contraseña : ?
4260 Error SAT 121 en complemento ECC1, "El valor del atributo '(ecc11:EstadoDeCuentaCombustible:SubTotal)' no coincide con la suma de los valores de los atributos [ConceptoEstadoDeCuentaCombustible]:[Importe]"
4261 Error SAT 122 en complemento ECC1, "El valor del atributo '(ecc11:EstadoDeCuentaCombustible:Total)' debe ser igual a la suma del valor del atributo [SubTotal] y la suma de los valores de los atributos [ConceptoEstadoDeCuentaCombustible]:[Traslados]:[Tras...
4262 Error SAT 123 en complemento ECC1, "El valor del atributo '(Conceptos:ConceptoEstadoDeCuentaCombustible:Rfc)' no existe en la Lista de Contribuyentes Obligados (LCO)."
4263 Error SAT 124 en complemento ECC1, "El valor del atributo '([cfdi]:[subtotal])' del componente base debe ser igual a la suma de cada atributo [importe] delelemento [Comprobante]:[Conceptos]:[Concepto] "
4264 Error SAT 125 en complemento ECC1, "El valor del atributo '([cfdi]:[tipoDeComprobante])' del componente base es requerido y debe ser {ingreso}"
4265 Error SAT 126 en complemento ECC1, "El valor del atributo '([cfdi]:[total])' del componente base debe ser igual a subtotal, menos el decuento, más los impuestos trasladados, menos los impuestos retenidos"
4270 Valores en catalogo ? correctos
4271 Valor ? no encontrado en el catalogo ?
4280 Complemento de comercio exterior no soportado
4281 Complemento INE Versión 1.0 fuera de vigencia.