Ruby

A continuación encontrara los ejemplos para consumir los servicios de SmartWeb; cabe resaltar que todos los ejemplos fueron probados exitosamente mediante la librería Savon 2 para Ruby 2.1. De igual manera puede descargar los proyectos con los código de ejemplo de la pagina de github para SmarterWeb.

Autenticación

Antes de realizar cualquier otra operación es necesario autenticarse, para consumir este servicio se usa la URL: http://pruebascfdi.smartweb.com.mx/Autenticacion/wsAutenticacion.asmx?WSDL.

El servicio de autenticación básico recibe un usuario y una contraseña, si ambos son correctos devuelve un token de autenticación, en caso contrario se lanza una excepción.

require 'savon'

autentica = Savon.client do
    wsdl 'http://pruebascfdi.smartweb.com.mx/Autenticacion/wsAutenticacion.asmx?WSDL'
end
begin
    response = autentica.call(:autenticar_basico) do
        message usuario: 'demo', password: '123456789'
    end
    token = response.body[:autenticar_basico_response][:autenticar_basico_result]
    puts token
rescue => e
    puts e
end

Timbrado

Para el servicio de timbrado se usa la URL: http://pruebascfdi.smartweb.com.mx/Timbrado/wsTimbrado.asmx?WSDL.

TimbrarXML

TimbrarXML Recive el contenido de una factura en string y el token de autenticación, si la factura y el token son correctos devuelve el complemento timbre en un string, en caso contrario lanza una excepción.

require 'savon'

autentica = Savon.client do
    wsdl 'http://pruebascfdi.smartweb.com.mx/Autenticacion/wsAutenticacion.asmx?WSDL'
end
timbrado = Savon.client do
    wsdl 'http://pruebascfdi.smartweb.com.mx/Timbrado/wsTimbrado.asmx?WSDL'
end
begin
    response = autentica.call(:autenticar_basico) do
        message usuario: 'demo', password: '123456789'
    end
    token = response.body[:autenticar_basico_response][:autenticar_basico_result]
    xml = File.readlines('factura1peso.xml').join('')
    response = timbrado.call(:timbrar_xml) do
        message xml_comprobante: xml, token_autenticacion: token
    end
    result = response.body[:timbrar_xml_response][:autenticar_basico_result]
    puts result
rescue => e
    puts e
end

TimbrarXMLV2

TimbrarXMLV2 es muy similar a TimbrarXML, con la diferencia de que el resultado en lugar de ser solo el complemento timbre, es la factura ya timbrada.

require 'savon'

autentica = Savon.client do
    wsdl 'http://pruebascfdi.smartweb.com.mx/Autenticacion/wsAutenticacion.asmx?WSDL'
end
timbrado = Savon.client do
    wsdl 'http://pruebascfdi.smartweb.com.mx/Timbrado/wsTimbrado.asmx?WSDL'
end
begin
    response = autentica.call(:autenticar_basico) do
        message usuario: 'demo', password: '123456789'
    end
    token = response.body[:autenticar_basico_response][:autenticar_basico_result]
    xml = File.readlines('factura1peso.xml').join('')
    response = timbrado.call(:timbrar_xmlv2) do
        message xml_comprobante: xml, token_autenticacion: token
    end
    result = response.body[:timbrar_xml_response][:autenticar_basico_result]
    puts result
rescue => e
    puts e
end

Cancelación

Para el servicio de cancelación se usa el servicio con la URL: http://pruebascfdi.smartweb.com.mx/Cancelacion/wsCancelacion.asmx?WSDL.

CancelarCSD

Este servicio recibe los archivos *.cer y *.key en base 64, la contraseña del archivo *.key, el RFC del emisor que desea cancelar la facturas, los UUIDs de las facturas a cancelar (estos se encuentran dentro del complemento timbre) y el token de autentificación.

require 'base64'
require 'savon'

autentica = Savon.client do
    wsdl 'http://pruebascfdi.smartweb.com.mx/Autenticacion/wsAutenticacion.asmx?WSDL'
end
cancelacion = Savon.client do
    wsdl 'http://pruebascfdi.smartweb.com.mx/Cancelacion/wsCancelacion.asmx?WSDL'
end
begin
    response = autentica.call(:autenticar_basico) do
        message usuario: 'demo', password: '123456789'
    end
    token = response.body[:autenticar_basico_response][:autenticar_basico_result]
    cer = IO.binread('aad990814bp7_1210261233s.cer')
    key = IO.binread('aad990814bp7_1210261233s.key')
    cerB64 = Base64.encode64(cer)
    keyB64 = Base64.encode64(key)
    # Los UUIDs para este ejemplo fueron generados de manera aleatoria
    uuids = ['17aeeccc-6ec0-49af-b786-0878d34e0b27', 'a3216283-078c-418e-bf2c-2fb62e418d45']
    response = cancelacion.call(:cancelar_csd, message: {
        'CSDCer' => cerB64,
        'CSDKey' => keyB64,
        password: '12345678a',
        'RFCEmisor' => 'AAD990814BP7',
        'UUIDs' => {string: uuids},
        token_autenticacion: token
    })
    acuse = response.body[:cancelar_csd_response][:cancelar_csd_result]
    puts acuse
rescue => e
    puts e
end

CancelarPEM

Este servicio es muy similar a “CancelarCSD”, con la diferencia de que deben de mandarse el certificado y el key en formato *.pem, ademas de que no se envia la contraseña del key, ya que no es requerida.

require 'base64'
require 'savon'

autentica = Savon.client do
    wsdl 'http://pruebascfdi.smartweb.com.mx/Autenticacion/wsAutenticacion.asmx?WSDL'
end
cancelacion = Savon.client do
    wsdl 'http://pruebascfdi.smartweb.com.mx/Cancelacion/wsCancelacion.asmx?WSDL'
end
begin
    response = autentica.call(:autenticar_basico) do
        message usuario: 'demo', password: '123456789'
    end
    token = response.body[:autenticar_basico_response][:autenticar_basico_result]
    cer = IO.binread('aad990814bp7_1210261233s.cer.pem')
    key = IO.binread('aad990814bp7_1210261233s.key.pem')
    cerB64 = Base64.encode64(cer)
    keyB64 = Base64.encode64(key)
    # Los UUIDs para este ejemplo fueron generados de manera aleatoria
    uuids = ['17aeeccc-6ec0-49af-b786-0878d34e0b27', 'a3216283-078c-418e-bf2c-2fb62e418d45']
    response = cancelacion.call(:cancelar_pem, message: {
        'PEMCer' => cerB64,
        'PEMKey' => keyB64,
        'RFCEmisor' => 'AAD990814BP7',
        'UUIDs' => {string: uuids},
        token_autenticacion: token
    })
    acuse = response.body[:cancelar_csd_response][:cancelar_csd_result]
    puts acuse
rescue => e
    puts e
end

Timbres disponibles

Para obtener los timbres disponibles es necesario agregar el servicio que corresponde a la siguiente URL: https://pruebascfdi.smartweb.com.mx/Account/wsAccount.svc?wsdl. Notese que esta URL trabaja con HTTP seguro.

require 'savon'

autentica = Savon.client do
    wsdl 'http://pruebascfdi.smartweb.com.mx/Autenticacion/wsAutenticacion.asmx?WSDL'
end
begin
    response = autentica.call(:autenticar_basico) do
        message usuario: 'demo', password: '123456789'
    end
    token = response.body[:autenticar_basico_response][:autenticar_basico_result]
    account = Savon.client do
        wsdl 'https://pruebascfdi.smartweb.com.mx/Account/wsAccount.svc?wsdl'
        ssl_verify_mode :none
        headers 'token' => token
    end
    response = account.call(:get_saldo_client_by_id)
    saldoCliente = response.body[:get_saldo_client_by_id_response][:get_saldo_client_by_id_result]
    puts saldoCliente[:saldo_timbres]
    puts saldoCliente[:timbres_utilizados]
rescue => e
    puts e
end

lenguajes/ruby.txt · Última modificación: 2016/08/10 09:34 (editor externo)
Volver arriba
CC Attribution-Share Alike 3.0 Unported
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0