fm_timbrado_cfdi 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 89cd03bc7bf2f58390477d7a1512cb0c02948afa
4
- data.tar.gz: 989a8a71fc06753db2016b1aca6d5e45dd4bff29
3
+ metadata.gz: c53655154992b61d9112255b533ee3e53c96edc4
4
+ data.tar.gz: 5223cc5a316f3e155fb393e8c81fdf9be5147a40
5
5
  SHA512:
6
- metadata.gz: d8348f8b2703b5f718d3cc1488c45dcb0d57ad9a8decfb73f52f9131d999432c071340b562b343e00ceb5af30cec0fa94fe1004c3eb20babafcc48ec4f46a391
7
- data.tar.gz: bce2590e41caec15a8cfecc3b8ce94e65b9bc2c3a000c1e754fc566ca3e472c8ac411e8ae23591c84be7f9cec3f1a16c504f1cc4552e976e83f23b8971385647
6
+ metadata.gz: 1577e3b67ca31f0800c44fc179e556d7d0dc4e5418fcceebe1d1e2595d25f995e864ec69c1759a24e5985d38b7da2aee9369732f66a58dac903ac8ad193f7ea1
7
+ data.tar.gz: d57e5d66acfd1d04c6e271dfbac007d8d3c73bacbdddf29be48c7ce4d42e93ee75cb3ca83fdf66a61fd5c9c449552434a80899065580aa0defc3c5bdc1004a0f
@@ -25,52 +25,34 @@ module FmTimbradoCfdi
25
25
  def timbrar(rfc, documento, opciones={})
26
26
  text_to_cfdi = Base64::encode64( documento )
27
27
  # Realizamos la peticion
28
- configurar_cliente
29
- response = @client.call(:request_timbrar_cfdi,
30
- message:
31
- { "param0" => {
32
- "UserPass" => user_pass,
33
- "UserID" => user_id,
34
- "emisorRFC" => rfc,
35
- "text2CFDI" => text_to_cfdi,
36
- }.merge(opciones)
37
- }
38
- )
39
- FmRespuesta.new(response)
28
+ respuesta = webservice_call(:request_timbrar_cfdi, rfc, {"text2CFDI" => text_to_cfdi}.merge(opciones))
29
+ FmRespuesta.new(respuesta)
40
30
  end
41
31
 
42
32
  def subir_certificado(rfc, certificado, llave, password, opciones = {})
43
- configurar_cliente
44
- respuesta = @client.call(:activar_cancelacion,
45
- message:
46
- { "param0" => {
47
- "UserPass" => user_pass,
48
- "UserID" => user_id,
49
- "emisorRFC" => rfc,
50
- "archivoCer" => Base64::encode64(certificado),
33
+ parametros = { "archivoCer" => Base64::encode64(certificado),
51
34
  "archivoKey" => Base64::encode64(llave),
52
- "clave" => password,
53
- }.merge(opciones)
54
- })
35
+ "clave" => password }
36
+ respuesta = webservice_call(:activar_cancelacion, rfc, parametros.merge(opciones))
55
37
  FmRespuestaCancelacion.new(respuesta)
56
38
  end
57
39
 
58
40
  def cancelar(rfc, uuid, opciones = {})
59
- configurar_cliente
60
- respuesta = @client.call(:request_cancelar_cfdi,
61
- message:
62
- { "param0" => {
63
- "UserPass" => user_pass,
64
- "UserID" => user_id,
65
- "emisorRFC" => rfc,
66
- "uuid" => uuid,
67
- }.merge(opciones)
68
- })
41
+ respuesta = webservice_call(:request_cancelar_cfdi, rfc, {uuid: uuid}.merge(opciones))
69
42
  FmRespuestaCancelacion.new(respuesta)
70
43
  end
71
44
 
72
45
 
73
46
  private
47
+
48
+ def webservice_call(accion, rfc, opciones)
49
+ configurar_cliente
50
+ parametros= { "param0" => { "UserPass" => user_pass, "UserID" => user_id, "emisorRFC" => rfc }.merge(opciones) }
51
+ @client.call(accion,
52
+ message: parametros
53
+ )
54
+ end
55
+
74
56
  def configurar_cliente
75
57
  @client = Savon.client(
76
58
  ssl_verify_mode: ssl_verify_mode,
@@ -5,21 +5,22 @@ require 'fm_timbrado_cfdi/fm_timbre'
5
5
 
6
6
  module FmTimbradoCfdi
7
7
  class FmRespuesta
8
- attr_reader :errors, :pdf, :xml, :cbb, :timbre, :no_csd_emisor
9
- def initialize(savon_response)
10
- parse(savon_response)
8
+ attr_reader :errors, :pdf, :xml, :cbb, :timbre, :no_csd_emisor, :raw
9
+ def initialize(response)
10
+ @errors = []
11
+ if response.is_a? String
12
+ @raw = response
13
+ procesar_respuesta(response)
14
+ else
15
+ parse_savon(response)
16
+ end
11
17
  end
12
18
 
13
- def parse (savon_response)
14
- @errors = []
19
+ def parse_savon (savon_response)
15
20
  begin
16
21
  if savon_response.success? then
17
- @doc = Nokogiri::XML(savon_response.to_xml)
18
- @xml = obtener_xml(@doc)
19
- @no_csd_emisor = obtener_no_csd_emisor(@xml) if @xml
20
- @timbre = obtener_timbre(@xml)
21
- @pdf = obtener_pdf(@doc)
22
- @cbb = obtener_cbb(@doc)
22
+ @raw = savon_response.to_xml
23
+ procesar_respuesta(savon_response.to_xml)
23
24
  else
24
25
  @errors << savon_response.soap_fault.to_s if savon_response.soap_fault?
25
26
  @doc = @xml = @no_csd_emisor = @timbre = @pdf = @cbb = nil
@@ -60,6 +61,15 @@ module FmTimbradoCfdi
60
61
 
61
62
  private
62
63
 
64
+ def procesar_respuesta(respuesta_xml)
65
+ @doc = Nokogiri::XML(respuesta_xml)
66
+ @xml = obtener_xml(@doc)
67
+ @no_csd_emisor = obtener_no_csd_emisor(@xml) if @xml
68
+ @timbre = obtener_timbre(@xml)
69
+ @pdf = obtener_pdf(@doc)
70
+ @cbb = obtener_cbb(@doc)
71
+ end
72
+
63
73
  def obtener_xml(doc)
64
74
  unless doc.xpath("//xml").empty? then
65
75
  Base64::decode64 doc.xpath("//xml")[0].content
@@ -1,3 +1,3 @@
1
1
  module FmTimbradoCfdi
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -20,10 +20,16 @@ describe FmTimbradoCfdi::FmRespuesta do
20
20
  it { expect(respuesta.no_csd_emisor?).to eq(false) }
21
21
  end
22
22
 
23
+ context 'respuesta correcta' do
24
+ let(:texto_respuesta){File.open('spec/fixtures/soap_response.txt').read}
25
+ let(:respuesta) { FmTimbradoCfdi::FmRespuesta.new(texto_respuesta) }
26
+ it { expect(respuesta.valid?).to eq(true) }
27
+ end
28
+
23
29
  context "respuesta sin xml" do
24
30
  let(:texto_respuesta){File.open('spec/fixtures/soap_response_sin_xml.txt').read}
25
31
  let(:respuesta) { FmTimbradoCfdi::FmRespuesta.new(texto_respuesta) }
26
32
  it { expect(respuesta.valid?).to eq(false) }
33
+ it { expect(respuesta.errors.first).to eq("No se ha encontrado el nodo xml") }
27
34
  end
28
-
29
35
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fm_timbrado_cfdi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Carlos García
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2014-01-07 00:00:00.000000000 Z
13
+ date: 2014-01-11 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: nokogiri