Ruby 2.1 o superior.
Instalación con RubyGems
Ejecutar los comandos directamente en la consola tal cual aparecen en la página de rubygems, en este caso:
- gem install net-http-persistent
- gem install uri-handler
Para efectos prácticos, usaremos el siguiente array asociativo como conjunto de parámetros utilizados por los servicios.
params = {"url" => 'http://services.test.sw.com.mx', "user" => 'demo', "password" => '123456789'}
Parámetros necesarios: url, user y password.
La clase de authentication, nos sirve para obtener un token de 2 hrs de duración. Podrá ser utilizado en los siguientes servicios para consumo.
Funciones disponibles
- set(Params)
- authentication
Importar la clase al comienzo de nuestro programa de la siguiente manera
require 'Authentication/auth.rb'Ejemplo de uso
Auth::set(params)
token = Auth::authentication.get_tokenLas funciones utilizables para el objeto obtenido son las siguientes
En caso de éxito
- get_status
- get_data
- get_response
- get_time_expire
- get_token
- get_status_code
En caso de error
- get_message
- get_messageDetail
Parámetros necesarios: [url, user y password] o [url y token].
La clase de Balance nos ayuda a obtener información referente a nuestra cuenta. Así sabremos cuando nos quedan pocos timbres o cuantos tenemos asignados, etc.
Importar la clase al comienzo de nuestro programa de la siguiente manera
require 'Balance/balance.rb'Ejemplo de uso
Balance::set(params)
response = Balance::account_balance
timbres = response.get_data['saldoTimbres']Las funciones utilizables para el objeto obtenido son las siguientes
En caso de éxito
- get_status
- get_data
- get_response
- get_status_code
En caso de error
- get_message
- get_messageDetail
Parámetros necesarios: [url, user y password] o [url y token]. Además de los parámetros que nos sean necesarios dependiendo del tipo de cancelación a usar.
La clase de Cancelation nos servirá para cancelar algún comprobante anteriormente ya timbrado, teniendo diversas opciones para poder cancelar dicho documento.
Funciones disponibles
- cancel_csd(uuid, rfc, password_csd, b64_csd, b64_key)
- cancel_uuid(uuid, rfc)
- cancel_pfx(uuid, rfc, password_csd, b64_pfx)
- cancel_xml(xml_cancel)
Importar la clase al comienzo de nuestro programa de la siguiente manera
require 'Cancelation/cancelation.rb'Ejemplo de uso
Cancelation::set(params)
response_csd = Cancelation::cancel_csd(uuid, rfc, password_csd, b64_csd, b64_key)
response_uuid = Cancelation::cancel_uuid(uuid, rfc)
response_pfx = Cancelation::cancel_pfx(uuid, rfc, password_csd, b64_pfx)
response_xml = Cancelation::cancel_xml(xml_cancel)Las funciones utilizables para estos objetos de cancelación son los siguientes
En caso de éxito
- get_status
- get_data
- get_response
- get_status_code
En caso de error
- get_message
- get_messageDetail
Parámetros necesarios: [user, password y url] o [token y url], así como el XML a timbrar utilizando emisión-timbrado.
La clase Issue nos ayudará a timbrar nuestros documentos XML por medio de emisión-timbrado. A diferencia de la clase Stamp, esta clase además de timbrar el documento le pondrá el sello. Nota: Para realizar el sellado, los certificados del rfc emisor deberán estar almacenados en el administrador de timbres.
Funciones disponibles
- set(params)
- issue_v1(xml, b64)
- issue_v2(xml, b64)
- issue_v3(xml, b64)
- issue_v4(xml, b64)
-
b64 es un parámetro opcional y se debe indicar en true si el XML va encodeado en base64. De no indicarse por defecto se tomará el valor de false
Importar la clase al comienzo de nuestro programa de la siguiente manera
require 'Issue/issue.rb'Ejemplo de uso
Issue::set(params)
response = Issue::issue_v4(xml,false)
File.open(response.get_data['uuid']+'.xml', 'w') { |file| file.write(response.get_data['cfdi']) }Las funciones correspondientes al objeto que regresan estas funciones son las siguientes
En caso de éxito
- get_status
- get_data
- get_response
- get_status_code
En caso de error
- get_message
- get_messageDetail
Parámetros necesarios: [user, password y url] o [token y url], así como el JSON a timbrar utilizando emisión-timbrado.
La clase Issue nos ayudará a timbrar nuestros documentos JSON por medio de emisión-timbrado.
Funciones disponibles
- set(params)
- issue_JSON_v1(json)
- issue_JSON_v2(json)
- issue_JSON_v3(json)
- issue_JSON_v4(json)
Importar la clase al comienzo de nuestro programa de la siguiente manera
require 'Issue/issue.rb'Ejemplo de uso
Issue::set(params)
response = Issue::issue_JSON_v4(json)
File.open(response.get_data['uuid']+'.xml', 'w') { |file| file.write(response.get_data['cfdi']) }Las funciones correspondientes al objeto que regresan estas funciones son las siguientes
En caso de éxito
- get_status
- get_data
- get_response
- get_status_code
En caso de error
- get_message
- get_messageDetail
Parámetros necesarios: [user, password y url] o [token y url], así como el XML a timbrar.
La clase Stamp se utiliza para el timbrado de documentos XML. El documento deberá venir ya con el sello.
Funciones disponibles
- set(params)
- stamp_v1(xml, b64)
- stamp_v2(xml, b64)
- stamp_v3(xml, b64)
- stamp_v4(xml, b64)
b64 es un parámetro opcional y se debe indicar en true si el XML va encodeado en base 64. De no indicarse por defecto se tomará el valor de false
Importar la clase al comienzo de nuestro programa de la siguiente manera
require 'Stamp/stamp.rb'Ejemplo de uso
Stamp::set(params)
response = Stamp::stamp_v4(xml)
File.open(response.get_data['uuid']+'.xml', 'w') { |file| file.write(response.get_data['cfdi']) }Las funciones correspondientes al objeto que regresan estas funciones son las siguientes
En caso de éxito
- get_status
- get_data
- get_response
- get_status_code
En caso de error
- get_message
- get_messageDetail
Parámetros necesarios: [user, password y url] o [token y url]. Además de parámetros adicionales según sea el caso.
La clase Validation servirá para validar que algunas cosas se encuentren de manera correcta antes de proceder al timbrado del mismo. Por ejemplo, nos pueden ayudar a decir si nuestro XML no tiene algún error, o consultar algún RFC de la lista de contribuyentes obligados.
Funciones disponibles
- set(params)
- validate_xml(xml)
- validate_LRFC(rfc)
- validate_LCO(no_cert)
Importar la clase al comienzo de nuestro programa de la siguiente manera
require 'Validation/validate.rb'Ejemplo de uso
Validate::set(params)
response_xml = Validate::validateXml(xml)
puts response_xml.get_response
response_LRFC = Validate::validate_LRFC(rfc)
puts response_LRFC.get_data
response_LCO = Validate::validate_LCO(no_cert)
puts responseNoCert.get_dataLas funciones correspondientes al objeto que regresan estas funciones son las siguientes
En caso de éxito
- get_status
- get_data
- get_response
- get_status_code
En caso de error
- get_message
- get_messageDetail
Parámetros necesarios: [user, password y url] o [token y url]. Además de el RFC del cual consultaremos los UUID's pendientes.
La clase Pendings servirá para obtener una lista de UUID's que tenga pendientes el RFC.
Funciones disponibles
- set(params)
- get_pendings(rfc)
Importar la clase al comienzo de nuestro programa de la siguiente manera
require 'Pendings/pendings.rb'Ejemplo de uso
rfc = 'LAN7008173R5'
Pendings::set(params)
reponse = Pendings::get_pendings(rfc)Las funciones correspondientes al objeto que regresan estas funciones son las siguientes
En caso de éxito
- get_status
- get_data
- get_response
- get_status_code
En caso de error
- get_message
- get_messageDetail
Parámetros necesarios: [user, password y url] o [token y url]. Además de parámetros adicionales según sea el caso.
La clase AcceptReject servirá para aceptar o rechazar alguna factura que tenga pendiente el RFC asociado.
Funciones disponibles
- set(params)
- accept_reject_csd(uuids, rfc, password, csd, key)
- accept_reject_pfx(uuids, rfc, password, pfx)
- accept_reject_uuid(uuid, rfc, action)
- accept_reject_xml(xml)
Action puede ser "aceptacion" o "rechazo"
Importar la clase al comienzo de nuestro programa de la siguiente manera
require 'AcceptReject/accept_reject.rb'Ejemplo de uso
b64_csd = read_file('../../resources/b64CSD.txt')
b64_key = read_file('../../resources/b64Key.txt')
password_csd = '12345678a'
uuids = []
uuids << {"uuid" => "6b02b155-25fd-488d-862b-5a5dc5694b62", "action" => "Rechazo"}
uuids << {"uuid" => "ef47cd9e-b495-483d-b7ad-7f374fe8e353", "action" => "Rechazo"}
rfc = 'LAN7008173R5'
AcceptReject::set(params)
response = AcceptReject::accept_reject_csd(uuids, rfc, password_csd, b64_csd, b64_key)
puts response.get_responseLas funciones correspondientes al objeto que regresan estas funciones son las siguientes
En caso de éxito
- get_status
- get_data
- get_response
- get_status_code
En caso de error
- get_message
- get_messageDetail
Parámetros necesarios: [user, password y url] o [token y url]. Además de parámetros adicionales según sea el caso.
La clase Relations servirá para consultar las facturas que se encuentren relacionadas a un UUID.
Funciones disponibles
- set(params)
- relations_csd(uuid, rfc, passwordcsd, b64CSD, b64Key)
- relations_pfx(uuid, rfc, passwordcsd, b64PFX)
- relations_uuid(uuid, rfc)
- relations_xml(xml) Importar la clase al comienzo de nuestro programa de la siguiente manera
require 'Relations/relations.rb'Ejemplo de uso
b64_csd = read_file('../../resources/b64CSD.txt')
b64_key = read_file('../../resources/b64Key.txt')
password_csd = '12345678a'
uuid = "77e5ee7e-518e-48d1-b719-2562eaf9cb1f"
rfc = 'LAN7008173R5'
Relations::set(params)
response = Relations::relations_csd(uuid, rfc, password_csd, b64_csd, b64_key)Las funciones correspondientes al objeto que regresan estas funciones son las siguientes
En caso de éxito
- get_status
- get_data
- get_response
- get_status_code
En caso de error
- get_message
- get_messageDetail
Parámetros necesarios: [url de consulta, action], así como parámetros correspondientes a la factura como son: rfcEmisor, rfcReceptor, total, y uuid.
La clase Status Cfdi servirá para consultar el estatus de cancelación, si es cancelable, vigente o cancelada de nuestras facturas.
Funciones disponibles
- status(rfc_emisor, rfc_receptor, total, uuid, url, action)
Importar la clase al comienzo de nuestro programa de la siguiente manera
require_relative 'StatusCfdi/status_cfdi.rb'Ejemplo de uso
url = 'https://consultaqr.facturaelectronica.sat.gob.mx/ConsultaCFDIService.svc'
action = 'http://tempuri.org/IConsultaCFDIService/Consulta'
rfc_emisor = 'LAN7008173R5'
rfc_receptor = 'LAN8507268IA'
total = '5800.00'
uuid = 'a9143107-25c5-4fb9-b0eb-2fcbcb855967'
response = StatusCfdi::status(rfc_emisor, rfc_receptor, total, uuid, url, action)Las funciones correspondientes al objeto que regresan estas funciones son las siguientes
- get_status_code
- get_response
- get_codigoEstatus
- get_esCancelable
- get_estado
- get_estatusCancelacion
