@@ -104,10 +104,13 @@ def echo(message)
104104 request = Net ::HTTP ::Post . new ( endpoint ) . tap do |req |
105105 req . body = soap_message . to_s
106106 req . content_type = "text/xml; charset=UTF-8"
107- req [ "User-Agent" ] = USER_AGENT
108107 end
109108
110- response = with_http_client { |client | client . request ( request ) }
109+ response = execute_request ( request )
110+
111+ unwrap_response ( response ) do |resp |
112+ Parser . parse_echo_response ( resp . body )
113+ end
111114 end
112115
113116 def fiscalize ( invoice :, message_id : SecureRandom . uuid )
@@ -199,4 +202,27 @@ def is_a_file_path?(path)
199202 def with_http_client ( &block )
200203 self . class . with_http_client_for ( host : host , port : port , credential : credential , &block )
201204 end
205+
206+ def execute_request ( request )
207+ request [ "User-Agent" ] ||= USER_AGENT
208+ with_http_client { |client | client . request ( request ) }
209+ end
210+
211+ def unwrap_response ( response , expected : [ Net ::HTTPSuccess ] , &block )
212+ if expected . any? { |status | response . is_a? ( status ) || response . code . to_i == status }
213+ return block . call ( response )
214+ end
215+
216+ Result . new . tap do |result |
217+ result . add_error (
218+ code : nil ,
219+ message : "Server responded with unexpected status" ,
220+ description : :server_error ,
221+ details : {
222+ statgus : response . code ,
223+ body : response . body
224+ }
225+ )
226+ end
227+ end
202228end
0 commit comments