class Dhl::Client
Public Class Methods
new(options)
click to toggle source
# File lib/dhl/client.rb, line 19 def initialize(options) config.username ||= options[:username] raise 'Provide a username (e.g.: `export DHL_USERNAME=dhlusername`).' if !config.username config.password ||= options[:password] raise 'Provide a password (e.g.: `export DHL_PASSWORD=dhlpassword`).' if !config.password config.account ||= options[:account] raise 'Provide a DHL account number (e.g.: `export DHL_ACCOUNT=123456789`).' if !config.account @requests_soap_client = Savon.client(client_options.merge(wsdl: "https://wsbuat.dhl.com:8300/amer/GEeuExpressRateBook?WSDL")) @tracking_soap_client = Savon.client(client_options.merge(wsdl: "https://wsbuat.dhl.com:8300/gbl/glDHLExpressTrack?WSDL")) end
Public Instance Methods
client_options()
click to toggle source
# File lib/dhl/client.rb, line 8 def client_options { wsse_auth: [config.username, config.password], wsse_timestamp: true, convert_request_keys_to: :camelcase, namespaces: { "xmlns:dhl" => "http://www.dhl.com" } } end
config()
click to toggle source
# File lib/dhl/client.rb, line 4 def config Dhl.config end
request_shipment(shipment_request)
click to toggle source
# File lib/dhl/client.rb, line 46 def request_shipment(shipment_request) response = requests_soap_client.call(:create_shipment_request, message: shipment_request.to_hash ) data = response.body[:shipment_response][:notification] notification = data.include?(:@code) ? data : data.first raise Dhl::Error::Generic.new(notification[:@code], notification[:message]) unless notification[:@code] == '0' result = {} image_format = response.body[:shipment_response][:label_image][:label_image_format] shipment_identification_number = response.body[:shipment_response][:shipment_identification_number] shipping_label_filename = "#{shipment_identification_number}.#{image_format.downcase}" Dir.mkdir('labels') unless File.exists?('labels') File.open("labels/#{shipping_label_filename}", 'wb') do |f| f.write( Base64.decode64( response.body[:shipment_response][:label_image][:graphic_image]) ) result[:shipping_label] = File.absolute_path(f) end package_result = response.body[:shipment_response][:packages_result][:package_result] result[:tracking_number] = shipment_identification_number result end
requests_soap_client()
click to toggle source
# File lib/dhl/client.rb, line 33 def requests_soap_client # SOAP Client operations: # => [:get_rate_request, :create_shipment_request, :delete_shipment_request] @requests_soap_client end
track(number)
click to toggle source
# File lib/dhl/client.rb, line 71 def track(number) request = Tracking::Request.new(number) response = tracking_soap_client.call(:track_shipment_request, message: request.to_hash) Tracking::Response.new(response.body) end
tracking_soap_client()
click to toggle source
# File lib/dhl/client.rb, line 39 def tracking_soap_client # SOAP Client operations: # => [:track_shipment_request] @tracking_soap_client end