Skip to content

Librería para el consumo de los servicios de SmarterWeb a través de Ruby.

Notifications You must be signed in to change notification settings

lunasoft/sw-sdk-ruby

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

sw-sdk-ruby

SW Smarterweb libreria para consumir los servicios de cfdi

SW sapien

Librería Ruby para el consumo de los servicios de SW sapien®.

Contenido


Compatibilidad 📋

Dependencias 🧰

Documentación 📂

Instalación 🛠️

Ejecutar los comandos directamente en consola

Gestor de paquetes de Windows

winget install RubyInstallerTeam.Ruby

Snap (Ubuntu u otras distribuciones Linux)

$ sudo snap install ruby --classic

Instalación con RubyGems

gem install ruby

Implementación

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'}

Authentication

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.

Authentication

Parámetros necesarios

  • url
  • user
  • password

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_token

Las funciones utilizables para el objeto obtenido son las siguientes

En caso de éxito En caso de error
get_status get_message
get_data get_messageDetail
get_response
get_token
get_time_expire
get_status_code

Balance

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.

Balance

Parámetros necesarios

  • url
  • user y password o url y token

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 En caso de error
get_status get_message
get_data get_messageDetail
get_response
get_status_code

Cancelación

La clase de Cancelation nos servirá para cancelar algún comprobante anteriormente ya timbrado, teniendo diversas opciones para poder cancelar dicho documento.

Cancelation

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.

Funciones disponibles

  • cancel_csd(uuid, rfc, password_csd, b64_cer, b64_key, motivo, foliosustitucion)
  • cancel_uuid(uuid, rfc, motivo, foliosustitucion)
  • cancel_pfx(uuid, rfc, password_csd, b64_pfx, motivo, foliosustitucion)
  • cancel_xml(xml_cancel, motivo, foliosustitucion)
Parámetro Descripción
uuid UUID del comprobante
rfc RFC del emisor
b64_cer Certificado del emisor en Base64
b64_key Key del emisor en Base64
b64_pfx Archivo Pfx en Base64
password_csd Contraseña del certificado
xml_cancel XML con los comprobantes a cancelar
motivo Clave para expresar el motivo de la cancelación
foliosustitucion UUID del comprobante que sustituye

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_cer, b64_key, motivo)
response_uuid = Cancelation::cancel_uuid(uuid, rfc, motivo, foliosustitucion)
response_pfx = Cancelation::cancel_pfx(uuid, rfc, password_csd, b64_pfx, motivo)
response_xml = Cancelation::cancel_xml(xml_cancel, motivo, foliosustitucion)

Las funciones utilizables para estos objetos de cancelación son los siguientes

En caso de éxito En caso de error
get_status get_message
get_data get_messageDetail
get_response
get_status_code

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.

Issue

Parámetros necesarios

  • url
  • user y password o url y token
  • xml

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 Issue son las siguientes

En caso de éxito En caso de error
get_status get_message
get_data get_messageDetail
get_response
get_status_code

Timbrado JSON

La clase Issue nos ayudará a timbrar nuestros documentos JSON por medio de emisión-timbrado.

IssueJson

Parámetros necesarios

  • url
  • user y password o url y token
  • JSON

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 En caso de error
get_status get_message
get_data get_messageDetail
get_response
get_status_code

Timbrado

La clase Stamp se utiliza para el timbrado de documentos XML. El documento deberá venir ya con el sello.

Stamp

Parámetros necesarios

  • url
  • user y password o url y token
  • xml sellado

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 En caso de error
get_status get_message
get_data get_messageDetail
get_response
get_status_code

📌 NOTA: Existen varias versiones de respuesta, las cuales son las siguientes:

Version Respuesta
V1 Devuelve el timbre fiscal digital
V2 Devuelve el timbre fiscal digital y el CFDI timbrado
V3 Devuelve el CFDI timbrado
V4 Devuelve todos los datos del timbrado

Validación

La clase Validation servirá para validar si nuestro XML no tiene algún error.

Validation

Parámetros necesarios

  • url
  • user y password o url y token

Funciones disponibles

  • set(params)
  • validate_xml(xml)

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

Las funciones correspondientes al objeto que regresan estas funciones son las siguientes

En caso de éxito En caso de error
get_status get_message
get_data get_messageDetail
get_response
get_status_code

Pendientes de Aceptación/Rechazo

La clase Pendings servirá para obtener una lista de UUID's que tenga pendientes el RFC.

Pendings

Parámetros necesarios

  • url
  • user y password o url y token

Además de el RFC del cual consultaremos los UUID's pendientes.

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 En caso de error
get_status get_message
get_data get_messageDetail
get_response
get_status_code

Aceptar o Rechazar cancelación

La clase AcceptReject servirá para aceptar o rechazar alguna factura que tenga pendiente el RFC asociado.

AcceptReject

Parámetros necesarios

  • url
  • user y password o url y token

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_response

Las funciones correspondientes al objeto que regresan estas funciones son las siguientes

En caso de éxito En caso de error
get_status get_message
get_data get_messageDetail
get_response
get_status_code

Relacionados

La clase Relations servirá para consultar las facturas que se encuentren relacionadas a un UUID.

Relations

Parámetros necesarios

  • url
  • user y password o url y token

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 En caso de error
get_status get_message
get_data get_messageDetail
get_response
get_status_code

Estatus Cfdi

La clase Status Cfdi servirá para consultar el estatus de cancelación, si es cancelable, vigente o cancelada de nuestras facturas.

StatusCfdi

Parámetros necesarios

  • url
  • user y password o url y token.

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

Storage

La clase de Storage permite recuperar un XML enviando como parámetro el folio fiscal del comprobante.

Storage

Parámetros necesarios

  • url api
  • url
  • user y password o url api y token

Funciones disponibles

  • get_xml(uuid)

Importar la clase al comienzo de nuestro programa de la siguiente manera

require 'Storage/storage.rb'

Setear los parámetros.

params = {"url_api" => 'http://api.test.sw.com.mx', "token" => ENV["SDKTEST_TOKEN"]}
Storage::set(params)
params = {"url_api" => 'http://api.test.sw.com.mx', "url" => 'http://services.test.sw.com.mx', "user" => ENV["SDKTEST_USER"], "password" => ENV["SDKTEST_PASSWORD"]}
Storage::set(params)

Ejemplo de uso

uuid = "b35d525e-d845-42c9-bbfb-eeeef601e2b4"
response = Storage::get_xml(uuid)

About

Librería para el consumo de los servicios de SmarterWeb a través de Ruby.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published