Diese Dienste werden ab dem 1. April 2021 nicht mehr verfügbar sein . Die neue Version der API verfügt über diese und weitere Tools, die Ihnen viel Zeit bei Validierungen oder SAT-Strafen bei Audits ersparen werden. Wir empfehlen Ihnen dringend, diese zu lesen Neue Dokumentation unter https://developers.facturoporti.com.mx/reference/api-facturacion-electronica Als Teil der neuen Funktionen können Sie:
Die neuen API-Zugriffsdienste werden veröffentlicht in:
https://testapi.facturoporti.com.mx/
https://api.facturoporti.com.mx/
Abhängig von der Umgebung, in der Sie sich befinden, sollten Sie Sandbox oder Produktion verwenden.
Benötigen Sie Hilfe oder müssen Sie Dienstleistungen in Anspruch nehmen? Senden Sie uns eine E-Mail an [email protected] [email protected], gehen Sie zur Seite https://www.facturoporti.com.mx/api-de-facturacion-electronica/ sprechen Sie online mit uns oder rufen Sie an Rufen Sie uns unter 555 546 2288 oder 558 421 7675 an und wir geben Ihnen gerne, was Sie brauchen.
Bibliothek im .Net-Standard , mit der Sie jede Art von digitalen Belegen für Einnahmen, Ausgaben, Überweisungen, Gehaltsabrechnungen, Zahlungen usw. (Xml und PDF) erstellen können. Durch Ausfüllen der entsprechenden Daten können Sie in wenigen Minuten ganz einfach digitale Rechnungen erstellen.
Es ist ideal und kompatibel zur Integration in jede Art von Projekt, egal ob Webanwendungen, Desktop, Mobilgeräte (Mono, Xamarin), Silverlight, WPF, .Net Core, Universal Windows Platform, Unity usw. Verwenden Sie die Bibliothek direkt im Projekt oder fügen Sie die Referenz mit - NuGet Package hinzu
Mit dieser Bibliothek können Sie unter anderem auch klingeln, stornieren, den CFDI-Status beim SAT erhalten und die verbleibenden Ringe einsehen.
Sie müssen keine SAT-Regeln kennen, die Bibliothek generiert das XML gemäß Anhang 20, die Bibliothek kümmert sich um alles und erleichtert den Integrationsprozess Ihres Systems und/oder Ihrer Anwendung, Ihres Dienstes, um den Anforderungen des SAT zu entsprechen.
Die Bibliothek ist sehr leicht und schnell, sie verwendet Rest-API-Aufrufe, die es Ihnen ermöglichen, Ihre CFDIs zu generieren und sie gleichzeitig per E-Mail zu versenden.
Es wird empfohlen, die Community-Entwicklungs-IDE Visual Studio 2015 oder 2017 oder höher zu verwenden. Alle Community-Versionen sind kostenlos und können unter https://visualstudio.microsoft.com/es/vs/community/ heruntergeladen werden.
Für die Bibliothek gelten folgende Anforderungen:
Überprüfen Sie auch die Version des Frameworks, die Sie für Ihr Projekt benötigen:
Holen Sie sich die neueste Version der FacturoPorTi-Stempelbibliothek in NuGet : FacturoPorTi.CFDI
In GitHub – FacturoPorTi-Factura-Electronica-dll – gibt es ein vollständiges Beispielprojekt zur Nutzung aller Methoden der Bibliothek; Wir empfehlen Ihnen dringend, es herunterzuladen und zu testen.
Um eine Anfrage an Ring zu senden, muss ein Objekt vom Typ CFDIPetition generiert werden, dieses wiederum verfügt über weitere Objekte, die gefüllt werden müssen:
using System ;
using System . Collections . Generic ;
using System . IO ;
using System . Linq ;
using System . Text ;
using System . Threading . Tasks ;
using FacturoPorTi . Api . Cfdi ;
using FacturoPorTi . Api . Cfdi . Entidades ;
using FacturoPorTi . Api . Cfdi . Genericos ;
private static void TimbrarDocumento ( )
{
Archivos manager = new Archivos ( ) ;
TimbreFiscalDigital Timbre = new TimbreFiscalDigital ( ) ;
CFDIPeticion Peticion = new CFDIPeticion ( ) ;
Utilerias utilerias = new Utilerias ( ) ;
string NombreArchivo = string . Empty ;
#region "Datos Generales"
Peticion . DatosGenerales = new DatosGeneralesCFDI ( ) ;
Peticion . DatosGenerales . Usuario = "PruebasTimbrado" ; // Este usuario se genera desde la pagina de https://cfdi.facturoporti.com.mx/ se debe de registrar para usar el productivo
Peticion . DatosGenerales . Password = "@Notiene1" ; // Es la contraseña del usuario cuando se registró
Peticion . DatosGenerales . GeneraPDF = "true" ;
Peticion . DatosGenerales . EnviaEmail = "false" ; // Valores permitidos "true" : "false";
Peticion . DatosGenerales . ReceptorEmail = "[email protected]" ;
//Logotipo (opcional) acepta una imagen jpeg o png en base 64 menor a 100 KB
//Peticion.DatosGenerales.Logotipo = manager.ConvertirByteToBase64(manager.ConvertirStreamToByte(manager.Abrir("Cambiar la ruta de lectura o enviar la imagen en base 64")));
enumTipoDocumento TipoDocumentoActual = enumTipoDocumento . Factura ;
switch ( TipoDocumentoActual )
{
case enumTipoDocumento . Factura :
Peticion . DatosGenerales . CFDI = "Factura" ;
Peticion . DatosGenerales . TipoCFDI = "Ingreso" ;
break ;
case enumTipoDocumento . NotaCargo :
Peticion . DatosGenerales . CFDI = "NotaCargo" ;
Peticion . DatosGenerales . TipoCFDI = "Ingreso" ;
break ;
case enumTipoDocumento . NotaCredito :
Peticion . DatosGenerales . CFDI = "NotaCredito" ;
Peticion . DatosGenerales . TipoCFDI = "Egreso" ;
break ;
case enumTipoDocumento . CartaPorte :
Peticion . DatosGenerales . CFDI = "CartaPorte" ;
Peticion . DatosGenerales . TipoCFDI = "Traslado" ;
break ;
case enumTipoDocumento . Pago :
Peticion . DatosGenerales . CFDI = "Pago" ;
Peticion . DatosGenerales . TipoCFDI = "Pago" ;
break ;
case enumTipoDocumento . ReciboNominaCFDI :
Peticion . DatosGenerales . CFDI = "ReciboNomina" ;
Peticion . DatosGenerales . TipoCFDI = "ReciboNomina" ;
break ;
}
Peticion . DatosGenerales . OpcionDecimales = ( ( int ) enumOpcionDecimales . Redondear ) . ToString ( ) ; // Valores permitidos 1: Truncar (Operaciones exactas) 2: Redondear hacia arriba o hacia abajo las cantidades
Peticion . DatosGenerales . NumeroDecimales = "2" ; // El valor predeterminado es 2 hasta un máximo de 6 decimales
#endregion "Datos Generales"
#region "Encabezado"
#region "Emisor"
Peticion . Encabezado = new EncabezadoCFDI ( ) ;
Peticion . Encabezado . Emisor = new EmisorCFDI ( ) ;
Peticion . Encabezado . Emisor . RFC = "AAA010101AAA" ; // Para realizar pruebas solamente se puede usar este RFC AAA010101AAA
Peticion . Encabezado . Emisor . NombreRazonSocial = "Mi nombre o el nombre de mi empresa" ;
Peticion . Encabezado . Emisor . RegimenFiscal = "601" ; // Se agrega la clave de acuerdo al catálogo del SAT http://omawww.sat.gob.mx/tramitesyservicios/Paginas/documentos/catCFDI.xls
// El domicilio de emision es opcional pero se agrega por peticion del usuario
DireccionCFDI direccion = new DireccionCFDI ( ) ;
direccion . Calle = "Avenida Reforma" ;
direccion . NumeroExterior = "1234" ;
direccion . NumeroInterior = "XA" ;
direccion . Colonia = "Roma Norte" ;
direccion . Estado = "Ciudad de México" ;
direccion . Municipio = "Benito Juarez" ;
direccion . Pais = "México" ;
direccion . CodigoPostal = "06470" ;
Peticion . Encabezado . Emisor . Direccion = new List < DireccionCFDI > ( ) ;
Peticion . Encabezado . Emisor . Direccion . Add ( direccion ) ;
#endregion "Emisor"
#region "Receptor"
Peticion . Encabezado . Receptor = new ReceptorCFDI ( ) ;
Peticion . Encabezado . Receptor . RFC = "XEXX010101000" ;
Peticion . Encabezado . Receptor . NombreRazonSocial = "Nombre del cliente" ;
Peticion . Encabezado . Receptor . UsoCFDI = "G03" ; // Se agrega la clave de acuerdo al catálogo del SAT http://omawww.sat.gob.mx/tramitesyservicios/Paginas/documentos/catCFDI.xls
// El domicilio del receptor es opcional pero se agrega por peticion del usuario
direccion = new DireccionCFDI ( ) ;
direccion . Calle = "Leo" ;
direccion . NumeroExterior = "9876" ;
direccion . NumeroInterior = "A-34" ;
direccion . Colonia = "San Rafael" ;
direccion . Estado = "Morelos" ;
direccion . Municipio = "Cuernavaca" ;
direccion . Pais = "México" ;
direccion . CodigoPostal = "62775" ;
Peticion . Encabezado . Receptor . Direccion = direccion ;
#endregion "Receptor"
Peticion . Encabezado . Fecha = DateTime . Now . ToString ( "yyyy-MM-ddTHH:mm:ss" ) ; // Se debe de enviar con el formato indicado yyyy-MM-ddTHH:mm:ss
Peticion . Encabezado . Serie = "A" ; // Es el numero de serie es un valor opcional
Peticion . Encabezado . Folio = "12" ; // Es el numero de folio es un valor opcional
Peticion . Encabezado . MetodoPago = "PUE" ; // Se agrega la clave de acuerdo al catálogo del SAT http://omawww.sat.gob.mx/tramitesyservicios/Paginas/documentos/catCFDI.xls
Peticion . Encabezado . FormaPago = "99" ; // Se agrega la clave de acuerdo al catálogo del SAT http://omawww.sat.gob.mx/tramitesyservicios/Paginas/documentos/catCFDI.xls
Peticion . Encabezado . Moneda = "MXN" ; // Se agrega la clave de acuerdo al catálogo del SAT http://omawww.sat.gob.mx/tramitesyservicios/Paginas/documentos/catCFDI.xls
Peticion . Encabezado . LugarExpedicion = "06470" ;
Peticion . Encabezado . SubTotal = "1500" ; // Es la suma de los importes en bruto
Peticion . Encabezado . Total = "1740" ; // Es la suma de los importes + los impuestos trasladados - los impuestos retenidos
#endregion "Encabezado"
#region "Conceptos"
Peticion . Conceptos = new List < ConceptoCFDI > ( ) ;
ConceptoCFDI concepto = new ConceptoCFDI ( ) ;
concepto . Cantidad = "1" ;
concepto . CodigoUnidad = "E48" ; // Se agrega la clave de acuerdo al catálogo del SAT http://omawww.sat.gob.mx/tramitesyservicios/Paginas/documentos/catCFDI.xls
//concepto.Unidad = "Pieza"; // Este es un valor opcional
//concepto.Serie = ""; // Este es un valor opcional se agregan numero de series, partes, etc.
concepto . CodigoProducto = "53112101" ; // Se agrega la clave de acuerdo al catálogo del SAT http://omawww.sat.gob.mx/tramitesyservicios/Paginas/documentos/catCFDI.xls
concepto . Producto = "Zapatos de caballero marca patito" ;
concepto . PrecioUnitario = "1000" ;
concepto . Importe = "1000" ;
concepto . Impuestos = new List < ImpuestosCFDI > ( ) ;
ImpuestosCFDI impuesto = new ImpuestosCFDI ( ) ;
impuesto . TipoImpuesto = ( ( int ) enumTipoImpuesto . Trasladado ) . ToString ( ) ; // Tipo de impuesto se envía la clave 1 traslado 2 retenido
impuesto . Impuesto = ( ( int ) enumImpuesto . IVA ) . ToString ( ) ;
impuesto . Factor = ( ( int ) enumFactor . Tasa ) . ToString ( ) ;
impuesto . Base = concepto . Importe ;
impuesto . Tasa = "0.160000" ; // Se debe de enviar con los 6 decimales la tasa para revisar las tasas actuales vea http://omawww.sat.gob.mx/tramitesyservicios/Paginas/documentos/catCFDI.xls
impuesto . ImpuestoImporte = utilerias . RegresaStringDecimalesXOpcion ( Convert . ToDecimal ( concepto . Importe ) * Convert . ToDecimal ( "0.160000" ) , ( int ) enumOpcionDecimales . Redondear , 2 ) ;
concepto . Impuestos . Add ( impuesto ) ;
// En caso de llevar IEPS se llena esta seccion
//if (TasaIEPS != null)
//{
// impuesto.TipoImpuesto = ((int)enumTipoImpuesto.Trasladado).ToString(); // Tipo de impuesto se envía la clave 1 traslado 2 retenido
// impuesto.Impuesto = ((int)enumImpuesto.IEPS).ToString();
// impuesto.Factor = ((int)enumFactor.Tasa).ToString();
// impuesto.Base = concepto.Importe;
// impuesto.Tasa = "0.08000"; // en el ejemplo la tasa es de 8 porciento Se debe de enviar con los 6 decimales la tasa para revisar las tasas actuales vea http://omawww.sat.gob.mx/tramitesyservicios/Paginas/documentos/catCFDI.xls
// impuesto.ImpuestoImporte = utilerias.RegresaStringDecimalesXOpcion(Convert.ToDecimal(concepto.Importe) * Convert.ToDecimal("0.080000"), (int)enumOpcionDecimales.Redondear, 2);
// concepto.Impuestos.Add(impuesto);
//}
//if (RetencionIVA != null)
//{
// impuesto.TipoImpuesto = ((int)enumTipoImpuesto.Retenido).ToString(); // Tipo de impuesto se envía la clave 1 traslado 2 retenido
// impuesto.Impuesto = ((int)enumImpuesto.IVA).ToString();
// impuesto.Factor = ((int)enumFactor.Tasa).ToString();
// impuesto.Base = concepto.Importe;
// impuesto.Tasa = "0.106667"; // en el ejemplo la tasa es de 2/3 partes de IVA 10.66667 porciento Se debe de enviar con los 6 decimales la tasa para revisar las tasas actuales vea http://omawww.sat.gob.mx/tramitesyservicios/Paginas/documentos/catCFDI.xls
// impuesto.ImpuestoImporte = utilerias.RegresaStringDecimalesXOpcion(Convert.ToDecimal(concepto.Importe) * Convert.ToDecimal("0.106667"), (int)enumOpcionDecimales.Redondear, 2);
// concepto.Impuestos.Add(impuesto);
//}
//if (RetencionISR != null)
//{
// impuesto.TipoImpuesto = ((int)enumTipoImpuesto.Retenido).ToString(); // Tipo de impuesto se envía la clave 1 traslado 2 retenido
// impuesto.Impuesto = ((int)enumImpuesto.ISR).ToString();
// impuesto.Factor = ((int)enumFactor.Tasa).ToString();
// impuesto.Base = concepto.Importe;
// impuesto.Tasa = "0.10000"; // en el ejemplo la tasa es de 10 porciento Se debe de enviar con los 6 decimales la tasa para revisar las tasas actuales vea http://omawww.sat.gob.mx/tramitesyservicios/Paginas/documentos/catCFDI.xls
// impuesto.ImpuestoImporte = utilerias.RegresaStringDecimalesXOpcion(Convert.ToDecimal(concepto.Importe) * Convert.ToDecimal("0.100000"), (int)enumOpcionDecimales.Redondear, 2);
// concepto.Impuestos.Add(impuesto);
//}
Peticion . Conceptos . Add ( concepto ) ;
concepto = new ConceptoCFDI ( ) ;
concepto . Cantidad = "2" ;
concepto . CodigoUnidad = "E48" ; // Se agrega la clave de acuerdo al catálogo del SAT http://omawww.sat.gob.mx/tramitesyservicios/Paginas/documentos/catCFDI.xls
//concepto.Unidad = "Pieza"; // Este es un valor opcional
//concepto.Serie = ""; // Este es un valor opcional se agregan numero de series, partes, etc.
concepto . CodigoProducto = "53112102" ; // Se agrega la clave de acuerdo al catálogo del SAT http://omawww.sat.gob.mx/tramitesyservicios/Paginas/documentos/catCFDI.xls
concepto . Producto = "Zapatos de mujer marca patito" ;
concepto . PrecioUnitario = "250" ;
concepto . Importe = "500" ;
concepto . Impuestos = new List < ImpuestosCFDI > ( ) ;
impuesto = new ImpuestosCFDI ( ) ;
impuesto . TipoImpuesto = ( ( int ) enumTipoImpuesto . Trasladado ) . ToString ( ) ; // Tipo de impuesto se envía la clave 1 traslado 2 retenido
impuesto . Impuesto = ( ( int ) enumImpuesto . IVA ) . ToString ( ) ;
impuesto . Factor = ( ( int ) enumFactor . Tasa ) . ToString ( ) ;
impuesto . Base = concepto . Importe ;
impuesto . Tasa = "0.160000" ; // Se debe de enviar con los 6 decimales la tasa para revisar las tasas actuales vea http://omawww.sat.gob.mx/tramitesyservicios/Paginas/documentos/catCFDI.xls
impuesto . ImpuestoImporte = utilerias . RegresaStringDecimalesXOpcion ( Convert . ToDecimal ( concepto . Importe ) * Convert . ToDecimal ( "0.160000" ) , ( int ) enumOpcionDecimales . Redondear , 2 ) ;
concepto . Impuestos . Add ( impuesto ) ;
Peticion . Conceptos . Add ( concepto ) ;
#endregion "Conceptos"
#region "Realiza el Timbrado"
FacturoPorTi . Api . Cfdi . ComprobanteDigital comprobante = new FacturoPorTi . Api . Cfdi . ComprobanteDigital ( ) ;
comprobante . SandBox = true ; // True = pruebas, False= Productivo
//Para el ejercicio se usan los certificados de prueba del SAT
// Tambien se puede enviar un stream o arreglo de bytes
string RutaCertificado = ObtieneDirectorioAplicacion ( ) + @"CertificadoAAA010101AAA.cer" ;
string RutaLlavePrivada = ObtieneDirectorioAplicacion ( ) + @"CertificadoAAA010101AAA.key" ;
string RutaTimbrados = ObtieneDirectorioAplicacion ( ) + @"Timbrados" ;
Console . WriteLine ( "Inicio de Timbrado " + DateTime . Now ) ;
var resultado = comprobante . GeneraCFDI ( Peticion , RutaCertificado , RutaLlavePrivada , "12345678a" ) ;
if ( resultado == true )
{
NombreArchivo = Peticion . Encabezado . Receptor . RFC + AcronimoArchivo ( TipoDocumentoActual ) + ( Peticion . Encabezado . Serie == null ? "" : Peticion . Encabezado . Serie ) + Peticion . Encabezado . Folio + "_" + Convert . ToDateTime ( Peticion . Encabezado . Fecha ) . ToString ( "yyyyMMdd" ) ;
manager . Guardar ( manager . ConvertirBase64ToByte ( comprobante . Timbrado . CFDITimbrado . Respuesta . CFDIXML ) , RutaTimbrados + NombreArchivo + ".xml" ) ;
manager . Guardar ( manager . ConvertirBase64ToByte ( comprobante . Timbrado . CFDITimbrado . Respuesta . PDF ) , RutaTimbrados + NombreArchivo + ".pdf" ) ;
Timbre = utilerias . CargaObjetoDeXML < TimbreFiscalDigital > ( new TimbreFiscalDigital ( ) , new Archivos ( ) . ConvertirBase64ToString ( comprobante . Timbrado . CFDITimbrado . Respuesta . TimbreXML ) ) ;
UUID = Timbre . UUID ;
Console . WriteLine ( comprobante . Mensaje + " UUID " + UUID ) ;
Console . WriteLine ( " Para ver los archivos ingrese a la carpeta " + RutaTimbrados ) ;
}
else
{
Console . WriteLine ( "" ) ;
Console . WriteLine ( comprobante . Mensaje ) ;
}
Console . WriteLine ( "Fin de Timbrado" ) ;
Console . WriteLine ( "" ) ;
//Console.ReadLine();
#endregion "Realiza el Timbrado"
}
Wenn Sie das Projekt mit dem Beispielcode verwenden . Führen Sie die Anwendung aus oder debuggen Sie sie. XML und PDF werden automatisch mit den von Ihnen eingegebenen Daten generiert (es handelt sich um eine Konsolenanwendung, die Ihnen beim Debuggen der von Ihnen gesendeten und empfangenen Informationen hilft). Wenn Sie es in Ihre Lösung integrieren, denken Sie daran, über die Referenzen zu verfügen, die den oben genannten Anforderungen entsprechen.
Überprüfen Sie das Antwortobjekt CFDITimbradoRespuesta, in dem Sie XML, PDF, Steuerstempel, Status, Fehler usw. finden. **Jeder andere Fehlercode als „000“ weist auf einen Fehlertyp hin**, der überprüft und korrigiert werden muss.
Die Attribute CFDIXML, TimbreXML und PDF liegen in Base64 vor und müssen in Text konvertiert werden, um den XML- und/oder CFDI-Stempel zu erhalten. Im Falle von PDF können sie im Binärformat gespeichert oder konvertiert werden, um die gedruckte Darstellung zu erhalten. Im Beispielprojekt ist dies bereits geschehen.
Mit der Bibliothek können Sie ein oder mehrere Steuerfolios gleichzeitig zum Stornieren senden. Sie müssen lediglich den Benutzernamen, das Passwort, den RFC des Ausstellers und das digitale Zertifikat senden.
private static void CancelarUUID ( )
{
CancelarCFDIPeticion Peticion = new CancelarCFDIPeticion ( ) ;
Peticion . Usuario = "PruebasTimbrado" ; // Este usuario se genera desde la pagina de https://cfdi.facturoporti.com.mx/ se debe de registrar para usar el productivo
Peticion . Password = "@Notiene1" ; // Es la contraseña del usuario cuando se registró
Peticion . RFC = "AAA010101AAA" ;
Peticion . UUIDs = new List < string > ( ) ;
Peticion . UUIDs . Add ( UUID ) ;
#region "Realiza la cancelación"
FacturoPorTi . Api . Cfdi . ComprobanteDigital comprobante = new FacturoPorTi . Api . Cfdi . ComprobanteDigital ( ) ;
comprobante . SandBox = true ; // True = pruebas, False= Productivo
//Para el ejercicio se usan los certificados de prueba del SAT
// Tambien se puede enviar un stream o arreglo de bytes
string RutaCertificado = ObtieneDirectorioAplicacion ( ) + @"CertificadoAAA010101AAA.cer" ;
string RutaLlavePrivada = ObtieneDirectorioAplicacion ( ) + @"CertificadoAAA010101AAA.key" ;
Console . WriteLine ( "Inicio de cancelación " + DateTime . Now ) ;
var resultado = comprobante . CancelarCFDI ( Peticion , RutaCertificado , RutaLlavePrivada , "12345678a" ) ;
if ( resultado == true )
{
Console . WriteLine ( comprobante . Mensaje + " Respuesta del Folio " + comprobante . Cancelaciones . FoliosRespuesta [ 0 ] . EstatusCancelacionSAT ) ;
}
else
{
Console . WriteLine ( "" ) ;
Console . WriteLine ( comprobante . Mensaje ) ;
}
Console . WriteLine ( "Fin de la cancelación" ) ;
Console . WriteLine ( "" ) ;
//Console.ReadLine();
#endregion "Realiza el Timbrado"
}
Wenn Sie das Projekt mit dem Beispielcode verwenden . Führen Sie die Anwendung aus oder debuggen Sie sie. Die Stornierung wird automatisch mit den von Ihnen eingegebenen Daten gesendet (es handelt sich um eine Konsolenanwendung, die Ihnen beim Debuggen der von Ihnen gesendeten und empfangenen Informationen hilft). Wenn Sie es in Ihre Lösung integrieren, denken Sie daran, über die Referenzen zu verfügen, die den oben genannten Anforderungen entsprechen.
In der Bibliothek können Sie ein oder mehrere Steuerblätter einsehen, um den Status der Stornierung einzusehen. Gemäß den vom SAT vorgegebenen Regeln kann der CFDI je nach den geltenden Regeln sofort storniert werden oder es muss maximal 72 Stunden gewartet werden, bis der Benutzer, der den CFDI erhält, die Stornierung des CFDI akzeptiert oder ablehnt.
Während dieses Zeitraums von 72 Stunden kann der Status des CFDI automatisch aktualisiert werden. Daher ist es erforderlich, den Dienst regelmäßig zu konsultieren, um den aktuellen Status des CFDI zu überprüfen. Es wird nicht empfohlen, dies mit einer Häufigkeit von weniger als einer Stunde durchzuführen, da es auch beim SAT 1 bis 72 Stunden dauert, bis sich die Statusänderung widerspiegelt. Daher wird empfohlen, dass Sie diesen Dienst jedes Mal mit einem Zeitraum von mehr als einer Stunde anrufen, da es bis dahin vergeblich ist, den Status des CFDI abzufragen.
private static void ConsultarEstatusUUID ( )
{
ConsultaEstatusPeticion Peticion = new ConsultaEstatusPeticion ( ) ;
Peticion . Usuario = "PruebasTimbrado" ; // Este usuario se genera desde la pagina de https://cfdi.facturoporti.com.mx/ se debe de registrar para usar el productivo
Peticion . Password = "@Notiene1" ; // Es la contraseña del usuario cuando se registró
Peticion . UUIDs = new List < string > ( ) ;
Peticion . UUIDs . Add ( UUID ) ;
#region "Realiza la cancelación"
FacturoPorTi . Api . Cfdi . ComprobanteDigital comprobante = new FacturoPorTi . Api . Cfdi . ComprobanteDigital ( ) ;
comprobante . SandBox = true ; // True = pruebas, False= Productivo
Console . WriteLine ( "Inicio de consulta " + DateTime . Now ) ;
var resultado = comprobante . ConsultaEstatusCFDI ( Peticion ) ;
if ( resultado == true )
{
Console . WriteLine ( comprobante . Mensaje + " " + comprobante . EstatusFolios . FoliosRespuesta [ 0 ] . EstatusCancelacionSAT ) ;
}
else
{
Console . WriteLine ( "" ) ;
Console . WriteLine ( comprobante . Mensaje ) ;
}
Console . WriteLine ( "Fin de la consulta" ) ;
Console . WriteLine ( "" ) ;
//Console.ReadLine();
#endregion "Realiza el Timbrado"
}
Um jede Art von CFDI auszustellen oder zu stornieren, ist ein Rest-Service-Mautpaket erforderlich. Wenn Sie den Testmodus mit dem Benutzer im Beispiel verwenden, verfügt er über ein Mautpaket, das Sie jederzeit verwenden können.
Wenn Sie die Produktivumgebung passieren, müssen Sie über ein gültiges Konto verfügen, um auf FacturoPorTi Register Here zugreifen zu können, sowie über ein Paket mit Klingeltönen für den Rest-Service. Die aktualisierte Preisliste der Türklingeln können Sie direkt einsehen unter:
Preisliste
Da wir mehrere Pakete mit unterschiedlichen Merkmalen in Bezug auf Nutzung und Preis haben, müssen Sie die Tabelle „Rest Api Service Stamps“ eingeben. Dort finden Sie die Bedingungen und Nutzung jedes Pakets.
private static void ConsultarTimbresRestantes ( )
{
ConsultaTimbresRestantesPeticion Peticion = new ConsultaTimbresRestantesPeticion ( ) ;
Peticion . Usuario = "PruebasTimbrado" ; // Este usuario se genera desde la pagina de https://cfdi.facturoporti.com.mx/ se debe de registrar para usar el productivo
Peticion . Password = "@Notiene1" ; // Es la contraseña del usuario cuando se registró
#region "Realiza la cancelación"
FacturoPorTi . Api . Cfdi . ComprobanteDigital comprobante = new FacturoPorTi . Api . Cfdi . ComprobanteDigital ( ) ;
comprobante . SandBox = true ; // True = pruebas, False= Productivo
Console . WriteLine ( "Inicio de consulta de timbres restantes " + DateTime . Now ) ;
var resultado = comprobante . ConsultaTimbresRestantes ( Peticion ) ;
if ( comprobante . Resultado == true )
{
Console . WriteLine ( comprobante . Mensaje ) ;
Console . WriteLine ( " Fecha de Compra = " + resultado . FechaCompra + " Timbres Utilizados= " + resultado . TimbresUtilizados + " CreditosRestantes = " + resultado . CreditosRestantes ) ;
}
else
{
Console . WriteLine ( "" ) ;
Console . WriteLine ( comprobante . Mensaje ) ;
}
Console . WriteLine ( "Fin de la consulta de timbres restantes" ) ;
Console . ReadLine ( ) ;
#endregion "Realiza el Timbrado"
}
Wenn Sie weitere Optionen zum Generieren jeglicher Art von CFDI erfahren möchten, lesen Sie die Dokumentation mit dem Datenwörterbuch , das alle Attribute und die Beschreibung der zulässigen Werte enthält: https://developers.facturoporti.com.mx /reference/api-electronic-billing
Wenn Sie Hilfe benötigen oder Fragen haben, kontaktieren Sie uns unter [email protected] oder gehen Sie zu FacturoPorTi, um Ihnen bei Ihren Anforderungen zu helfen.
Forken Sie das Repository
Klonen Sie das Repository
Git-Klon [email protected]:IhrBenutzername/factura-electronica-Dll-Api-Rest.git
Erstellen Sie einen Zweig
git checkout desarrollo
git pull al original desarrollo
# Podrás escoger el nombre de tu rama
git checkout -b <feature/my_branch>
git add .
git commit -m "mis cambios"
git push origin <feature/my_branch>
***-
Entwickelt in Mexiko von FacturoPorTi. Lizenz verwenden Weitere Informationen.