บริการเหล่านี้จะไม่สามารถใช้งานได้อีกต่อไปในวันที่ 1 เมษายน 2021 API เวอร์ชันใหม่มีเครื่องมือเหล่านี้และเครื่องมืออื่นๆ อีกมากมายที่จะอำนวยความสะดวกและประหยัดเวลาได้มากในการตรวจสอบความถูกต้องหรือการลงโทษ SAT ในการตรวจสอบ เราขอแนะนำอย่างยิ่งให้คุณตรวจสอบ เอกสารใหม่ใน https://developers.facturoporti.com.mx/reference/api-facturacion-electronica ในฐานะส่วนหนึ่งของคุณสมบัติใหม่ คุณจะสามารถ:
บริการการเข้าถึง API ใหม่ได้รับการเผยแพร่ใน:
https://testapi.facturoporti.com.mx/
https://api.facturoporti.com.mx/
คุณควรใช้แซนด์บ็อกซ์หรือการใช้งานจริง ทั้งนี้ขึ้นอยู่กับสภาพแวดล้อมที่คุณอยู่
คุณต้องการความช่วยเหลือหรือจำเป็นต้องจ้างบริการหรือไม่? ส่งอีเมลถึงเราที่ [email protected] [email protected] ไปที่หน้า https://www.facturoporti.com.mx/api-de-facturacion-electronica/ พูดคุยกับเราทางออนไลน์หรือโทร เรา โทร 555 546 2288 หรือ 558 421 7675 เรายินดีที่จะให้สิ่งที่คุณต้องการ
ไลบรารีใน .Net Standard ที่ให้คุณสร้างรายได้จากใบเสร็จดิจิทัล ค่าใช้จ่าย การโอน บัญชีเงินเดือน การชำระเงิน ฯลฯ (Xml และ PDF) โดยการกรอกข้อมูลที่เกี่ยวข้อง คุณสามารถสร้างใบแจ้งหนี้ดิจิทัลได้อย่างง่ายดายในเวลาไม่กี่นาที
เหมาะอย่างยิ่งและเข้ากันได้ในการรวมเข้ากับโปรเจ็กต์ทุกประเภท ไม่ว่าจะเป็นเว็บแอปพลิเคชัน เดสก์ท็อป อุปกรณ์เคลื่อนที่ (Mono, Xamarin), Silverlight, WPF, .Net Core, Universal Windows Platform, Unity ฯลฯ ใช้ไลบรารีโดยตรงในโครงการหรือเพิ่มข้อมูลอ้างอิงโดยใช้ - NuGet Package
ด้วยไลบรารีนี้ คุณยังสามารถส่งเสียง ยกเลิก รับสถานะ CFDI กับ SAT ดูเสียงสัญญาณที่เหลือ และอื่นๆ อีกมากมาย
คุณไม่จำเป็นต้องรู้กฎ SAT ใด ๆ ห้องสมุดจะสร้าง XML ตามภาคผนวก 20 ห้องสมุดจะดูแลทุกอย่าง อำนวยความสะดวกในกระบวนการรวมระบบและ/หรือแอปพลิเคชัน บริการของคุณ เพื่อให้เป็นไปตามที่ SAT ร้องขอ
ไลบรารีมีน้ำหนักเบาและรวดเร็วมาก โดยใช้การเรียก Rest Api ซึ่งจะช่วยให้คุณสร้าง CFDI ของคุณและส่งทางอีเมลได้ในเวลาเดียวกัน
ขอแนะนำให้ใช้ Visual Studio 2015 หรือ 2017 community development IDE หรือสูงกว่า เวอร์ชันชุมชนทั้งหมดนั้นฟรีและสามารถดาวน์โหลดได้จาก https://visualstudio.microsoft.com/es/vs/community/
ห้องสมุดมีข้อกำหนดดังต่อไปนี้:
ตรวจสอบเวอร์ชันของเฟรมเวิร์กที่คุณต้องการตามโครงการของคุณ:
รับไลบรารีแสตมป์ FacturoPorTi เวอร์ชันล่าสุดใน NuGet : FacturoPorTi.CFDI
ใน GitHub - FacturoPorTi-Factura-Electronica-dll มีโครงการตัวอย่างที่สมบูรณ์ของการใช้วิธีการทั้งหมดของห้องสมุด เราขอแนะนำอย่างยิ่งให้คุณดาวน์โหลดและทดสอบ
เมื่อต้องการส่งคำขอไปยังเสียงเรียกเข้า ต้องสร้างออบเจ็กต์ประเภท CFDIPetition ซึ่งจะมีออบเจ็กต์อื่น ๆ ที่ต้องกรอก:
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"
}
หากคุณใช้โปรเจ็กต์ด้วยโค้ดตัวอย่าง เรียกใช้หรือดีบักแอปพลิเคชัน Xml และ PDF จะถูกสร้างขึ้นโดยอัตโนมัติด้วยข้อมูลที่คุณป้อน (เป็นแอปพลิเคชันคอนโซลที่ช่วยคุณดีบักข้อมูลที่คุณส่งและรับ) ในกรณีที่คุณรวมเข้ากับโซลูชันของคุณ อย่าลืมมีข้อมูลอ้างอิงที่สอดคล้องกับข้อกำหนดที่ระบุไว้ข้างต้น
ตรวจสอบออบเจ็กต์การตอบสนอง CFDITimbradoRespuesta ซึ่งคุณจะพบ XML, PDF, ตราประทับภาษี, สถานะ, ข้อผิดพลาด ฯลฯ **รหัสข้อผิดพลาดใดๆ นอกเหนือจาก "000" บ่งชี้ถึงข้อผิดพลาดบางประเภท** ที่ต้องได้รับการตรวจสอบและแก้ไข
แอ็ตทริบิวต์ CFDIXML, TimbreXML และ PDF อยู่ใน Base64 และต้องแปลงเป็นข้อความเพื่อรับการประทับตรา XML และ/หรือ CFDI ในกรณีของ PDF สามารถบันทึกหรือแปลงเป็นไบนารี่เพื่อรับการแสดงที่พิมพ์ออกมา ซึ่งได้ดำเนินการไปแล้วในโครงการตัวอย่าง
ไลบรารีอนุญาตให้คุณส่ง Fiscal Folios หนึ่งรายการขึ้นไปเพื่อยกเลิกในเวลาเดียวกัน คุณจะต้องส่งเพียงชื่อผู้ใช้ รหัสผ่าน RFC ของผู้ออก และใบรับรองดิจิทัลเท่านั้น
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"
}
หากคุณใช้โปรเจ็กต์ด้วยโค้ดตัวอย่าง เรียกใช้หรือดีบักแอปพลิเคชัน การยกเลิกจะถูกส่งไปพร้อมกับข้อมูลที่คุณป้อนโดยอัตโนมัติ (เป็นแอปพลิเคชันคอนโซลที่ช่วยคุณดีบักข้อมูลที่คุณส่งและรับ) ในกรณีที่คุณรวมเข้ากับโซลูชันของคุณ อย่าลืมมีข้อมูลอ้างอิงที่สอดคล้องกับข้อกำหนดที่ระบุไว้ข้างต้น
ไลบรารีช่วยให้คุณสามารถปรึกษา Folios ทางการเงินอย่างน้อยหนึ่งรายการเพื่อตรวจสอบสถานะของการยกเลิก ตามกฎที่กำหนดโดย SAT CFDI สามารถยกเลิกได้ทันทีหรือต้องรอสูงสุด 72 ชั่วโมงเพื่อให้ผู้ใช้ที่ได้รับ CFDI ยอมรับหรือปฏิเสธการยกเลิก CFDI ทั้งนี้ขึ้นอยู่กับกฎที่ใช้บังคับ
ในช่วงระยะเวลา 72 ชั่วโมงนี้ สถานะของ CFDI จะสามารถอัปเดตได้โดยอัตโนมัติ ดังนั้นจึงจำเป็นต้องปรึกษาบริการเป็นระยะเพื่อตรวจสอบสถานะปัจจุบันของ CFDI ไม่แนะนำให้ทำด้วยความถี่น้อยกว่า 1 ชั่วโมง เนื่องจาก SAT ใช้เวลาตั้งแต่ 1 ถึง 72 ชั่วโมงเพื่อดูการเปลี่ยนแปลงสถานะ ดังนั้นจึงขอแนะนำให้คุณเรียกใช้บริการนี้เป็นระยะเวลามากกว่า 1 ชั่วโมงในแต่ละครั้ง ก่อนหน้านั้นการพิจารณาสถานะของ CFDI จะไร้ประโยชน์
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"
}
ในการออกหรือยกเลิก CFDI ประเภทใดก็ตาม จำเป็นต้องมีแพ็คเกจค่าผ่านทาง Rest Service หากคุณใช้โหมดทดสอบกับผู้ใช้ตามตัวอย่าง ผู้ใช้จะมีแพ็คเกจค่าผ่านทางที่คุณสามารถใช้ได้เสมอ
เมื่อคุณผ่านสภาพแวดล้อมการทำงาน คุณต้องมีบัญชีที่ถูกต้องเพื่อเข้าถึง FacturoPorTi Register ที่นี่ และยังมีแพ็คเกจเสียงเรียกเข้าสำหรับ Rest Service คุณสามารถดูรายการราคากริ่งประตูที่อัปเดตได้โดยตรงที่:
รายการราคา
เนื่องจากเรามีแพ็คเกจหลายแพ็คเกจที่มีคุณสมบัติแตกต่างกันทั้งในแง่ของการใช้งานและราคา คุณต้องเข้าสู่ ตาราง Rest Api Service Stamps ที่นั่น คุณจะพบข้อกำหนดและการใช้งานของแต่ละแพ็คเกจ
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"
}
หากคุณต้องการทราบตัวเลือกเพิ่มเติมเกี่ยวกับวิธีการสร้าง CFDI ประเภทใดๆ โปรดอ่านเอกสารประกอบพร้อม พจนานุกรมข้อมูล ที่มีแอตทริบิวต์ทั้งหมดและคำอธิบายของค่าที่อนุญาต https://developers.facturoporti.com.mx /reference/api- การเรียกเก็บเงินทางอิเล็กทรอนิกส์
หากคุณต้องการความช่วยเหลือหรือมีคำถาม โปรดติดต่อเราที่ [email protected] หรือไปที่ FacturoPorTi เพื่อช่วยเหลือคุณตามความต้องการของคุณ
แยกพื้นที่เก็บข้อมูล
โคลนพื้นที่เก็บข้อมูล
git clone [email protected]:ชื่อผู้ใช้ของคุณ/factura-electronica-Dll-Api-Rest.git
สร้างสาขา
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>
-
พัฒนาขึ้นในเม็กซิโกโดย FacturoPorTi ใช้ใบอนุญาต ดูเพิ่มเติม.