fm_timbrado_cfdi 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c53655154992b61d9112255b533ee3e53c96edc4
|
4
|
+
data.tar.gz: 5223cc5a316f3e155fb393e8c81fdf9be5147a40
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
29
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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(
|
10
|
-
|
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
|
14
|
-
@errors = []
|
19
|
+
def parse_savon (savon_response)
|
15
20
|
begin
|
16
21
|
if savon_response.success? then
|
17
|
-
@
|
18
|
-
|
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
|
@@ -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.
|
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-
|
13
|
+
date: 2014-01-11 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: nokogiri
|