Consumiendo API desde C#
Timbrar
URL | |
Method | POST |
Type | JSON |
Se envían las variables
Usuario |
|
Contrasena |
|
Serializado | es el XML serializado en B64 como lo devuelve la dll |
TipoTimbrado | Indica si es un timbrado de Prueba o de Produccion (dejar en blanco) |
{
"Usuario":"PruebaG17",
"Contrasena":"a1fwoksRRbE=",
"Serializado":"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48Y2ZkaTpDb21wcm9iYW50ZSB4c2k6c2NoZW…",
"TipoTimbrado":"Prueba"
}
Respuesta
Xmlb64 | XML timbrado, en B64 |
Message | En caso de haber algún error nos indica la causa |
status | Es el estatus de la operación (success / error) |
{
"xmlb64": "UEQ5NGJXd2dkbVZ5YzJsdmJqMGlNUzR3SWlCbGJtTnZaR2x1WnowaWRYUm1MVGdpUHo0OFkyWmthVHBEYjIxd…”,
"message": "",
"status": "success"
}
Ejemplo
*Para usar el JsonConvert necesito instalar en NuGet Newtonsoft.Json
//creo el bojeto Factura y le agrego valores
Factura f = new Factura();
f.usuario = "PruebaG17";
f.contrasena = "a1fwoksRRbE=";
f.serializado = TxtSerializado.Text;
f.tipotimbrado = "Prueba";
//declaro variables
string json = "";
string result = "";
string url = "";
//para usar el JsonConvert necesito instalar en NuGet Newtonsoft.Json
json = JsonConvert.SerializeObject(f);
url = $"https://api.opravymx.com/api/timbrar";
//instancia de la peticion
WebRequest Request = WebRequest.Create(url);
Request.Method = "post";
Request.ContentType = "application/json;charset=UTF-8";
//se hace la peticion
using (var SW = new StreamWriter(Request.GetRequestStream()))
{
SW.Write(json);
SW.Flush();
SW.Close();
}
//obtengo una respuesta
WebResponse Response = Request.GetResponse();
using (var SR = new StreamReader(Response.GetResponseStream()))
{
result = SR.ReadToEnd().Trim();
}
//agrego los valores del json a mi objeto Respuesta
Respuesta r = new Respuesta();
r = JsonConvert.DeserializeObject<Respuesta>(result);
//muestro la respuesta en pantalla
TxtSerializado.Text = "status: " + r.status + " \n" + "message: " + r.message + " \n" + "xmlb64: " + r.xmlb64;
TxtXML.Text = B64DeserializarTexto(r.xmlb64);
public class Factura
{
public string usuario { get; set; }
public string contrasena { get; set; }
public string serializado { get; set; }
public string tipotimbrado { get; set; }
}
public class Respuesta
{
public string xmlb64 { get; set; }
public string message { get; set; }
public string status { get; set; }
}
Cancelar
URL | |
Method | POST |
Type | JSON |
Se envían las variables
Usuario |
|
Contrasena |
|
UUID | UUID o FolioFiscal de la factura |
RFCEmisor | RFC de la empresa emisora de la factura |
TipoTimbrado | Indica si es un timbrado de Prueba o de Produccion (dejar en blanco) |
*Las facturas de prueba no son guardadas en el PAC por lo que regresa un error por no encontrarlas
{
"Usuario":"PruebaG17",
"Contrasena":"a1fwoksRRbE=",
"Uuid":"fb2577c7-7c66-4bb1-a2ae-d793d930d87f",
"Rfcemisor":"EKU9003173C9",
"TipoTimbrado":"Prueba"
}
Respuesta
Xmlb64 | XML del acuse de cancelación, en B64 |
Message | En caso de haber algún error nos indica la causa |
status | Es el estatus de la operación (success / error) |
{
"xmlb64": "",
"message": "CACFDI33 - No se encontró el CSD correspondiente al RFC EKU9003173C9 .",
"status": "error"
}
Ejemplo
*Para usar el JsonConvert necesito instalar en NuGet Newtonsoft.Json
Cancelar c = new Cancelar();
c.usuario = "PruebaG17";
c.contrasena = "a1fwoksRRbE=";
c.rfcemisor = TxtUuid.Text;
c.rfcemisor = TxtRfcEmisor.Text;
c.tipotimbrado = "Prueba";
string json = "";
string result = "";
string url = "";
json = JsonConvert.SerializeObject(c);
url = $"https://api.opravymx.com/api/cancelar";
WebRequest Request = WebRequest.Create(url);
Request.Method = "post";
Request.ContentType = "application/json;charset=UTF-8";
using (var SW = new StreamWriter(Request.GetRequestStream()))
{
SW.Write(json);
SW.Flush();
SW.Close();
}
WebResponse Response = Request.GetResponse();
using (var SR = new StreamReader(Response.GetResponseStream()))
{
result = SR.ReadToEnd().Trim();
}
Respuesta r = new Respuesta();
r = JsonConvert.DeserializeObject<Respuesta>(result);
TxtSerializado.Text = "status: " + r.status + " \n" + "message: " + r.message + " \n" + "xmlb64: " + r.xmlb64;
TxtXML.Text = B64DeserializarTexto(r.xmlb64);
public class Cancelar
{
public string usuario { get; set; }
public string contrasena { get; set; }
public string uuid { get; set; }
public string rfcemisor { get; set; }
public string tipotimbrado { get; set; }
}
public class Respuesta
{
public string xmlb64 { get; set; }
public string message { get; set; }
public string status { get; set; }
}
Estatus SAT
URL | |
Method | POST |
Type | JSON |
Se envían las variables
Usuario |
|
Contrasena |
|
UUID | UUID o FolioFiscal de la factura |
RFCEmisor | RFC de la empresa emisora de la factura |
RFCReceptor | RFC del receptor |
Total | Monto total de la factura |
{
"Usuario":"PruebaG17",
"Contrasena":"a1fwoksRRbE=",
"Uuid":"d5c4abb0-7eb7-4efd-9673-648627fa101a",
"Rfcemisor":"EKU9003173C9",
"Rfcreceptor":"XEXX010101000",
"Total":"590"
}
Respuesta
Xmlb64 | XML del acuse de cancelación, en B64 |
Message | En caso de haber algún error nos indica la causa |
status | Es el estatus de la operación (success / error) |
{
"estatus": "No Encontrado",
"escancelable": "",
"estatuscancelacion": "",
"codigoestatus": "N - 602: Comprobante no encontrado."
}
Ejemplo
Estatus es = new Estatus();
es.uuid = TxtUuidEstatus.Text;
es.total = TxtTotal.Text;
es.rfcemisor = TxtEmisor.Text;
es.rfcreceptor = TxtReceptor.Text;
string json = "";
string result = "";
string url = "";
json = JsonConvert.SerializeObject(es);
url = $"https://api.opravymx.com/api/estatus";
WebRequest Request = WebRequest.Create(url);
Request.Method = "post";
Request.ContentType = "application/json;charset=UTF-8";
using (var SW = new StreamWriter(Request.GetRequestStream()))
{
SW.Write(json);
SW.Flush();
SW.Close();
}
WebResponse Response = Request.GetResponse();
using (var SR = new StreamReader(Response.GetResponseStream()))
{
result = SR.ReadToEnd().Trim();
}
RespuestaEstatus r = new RespuestaEstatus();
r = JsonConvert.DeserializeObject<RespuestaEstatus>(result);
TxtSerializado.Text = "estatus: " + r.estatus + " \n" + "escancelable: " + r.escancelable + " \n" + "estatuscancelacion: " + r.estatuscancelacion + " \n" + "codigoestatus: " + r.codigoestatus;
public class Estatus
{
public string uuid { get; set; }
public string rfcemisor { get; set; }
public string rfcreceptor { get; set; }
public string total { get; set; }
}
public class RespuestaEstatus
{
public string estatus { get; set; }
public string escancelable { get; set; }
public string estatuscancelacion { get; set; }
public string codigoestatus { get; set; }
}
Respuestas posibles
-Factura vigente
estatus: Vigente
escancelable: Cancelable con aceptación
estatuscancelacion:
codigoestatus: S - Comprobante obtenido satisfactoriamente.
-Factura cancelada
estatus: Cancelado
escancelable: Cancelable sin aceptación
estatuscancelacion: Cancelado sin aceptación
codigoestatus: S - Comprobante obtenido satisfactoriamente.
-Factura de prueba o no encontrado
estatus: No encontrado
escancelable:
estatuscancelacion:
codigoestatus: N - 602: Comprobante no encontrado.
¿Le fue útil este artículo?
¡Qué bueno!
Gracias por sus comentarios
¡Sentimos mucho no haber sido de ayuda!
Gracias por sus comentarios
Comentarios enviados
Agradecemos su iniciativa, e intentaremos corregir el artículo