Consumiendo API desde C#



Timbrar

URL

https://api.opravymx.com/api/timbrar

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 { getset; }

        public string contrasena { getset; }

        public string serializado { getset; }

        public string tipotimbrado { getset; }

    }

public class Respuesta

    {

        public string xmlb64 { getset; }

        public string message { getset; }

        public string status { getset; }

    }

 

 

 

Cancelar

URL

https://api.opravymx.com/api/cancelar

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 { getset; }

        public string contrasena { getset; }

        public string uuid { getset; }

        public string rfcemisor { getset; }

        public string tipotimbrado { getset; }

    }


public class Respuesta

    {

        public string xmlb64 { getset; }

        public string message { getset; }

        public string status { getset; }

    }


 



Estatus SAT

URL

https://api.opravymx.com/api/estatus

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 { getset; }

        public string rfcemisor { getset; }

        public string rfcreceptor { getset; }

        public string total { getset; }

    }

public class RespuestaEstatus

    {

        public string estatus { getset; }

        public string escancelable { getset; }

        public string estatuscancelacion { getset; }

        public string codigoestatus { getset; }

    }


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.