Class: ZuoraClient

Inherits:
Object
  • Object
show all
Defined in:
lib/zuora_client.rb

Constant Summary collapse

PROD_URL =
'https://www.zuora.com/apps/services/a/21.0'
SANDBOX_URL =
'https://apisandbox.zuora.com/apps/services/a/23.0'

Instance Method Summary collapse

Constructor Details

#initialize(username, password, url = PROD_URL, verbose = false) ⇒ ZuoraClient

Returns a new instance of ZuoraClient.



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/zuora_client.rb', line 23

def initialize(username, password, url=PROD_URL, verbose=false)
  @username = username
  @password = password

  Savon::Request.log = verbose
   = Savon::Client.new url
  .request.http.ssl_client_auth :verify_mode => OpenSSL::SSL::VERIFY_NONE

  response = .login! do |soap|
    soap.namespace = 'http://api.zuora.com/'
    soap.body = {
        'wsdl:username' => username,
        'wsdl:password' => password
    }
  end.to_hash

  @session = response[:login_response][:result][:session]
  # apparently, the server url might change from the one called above - need to use the one returned
  @client = Savon::Client.new response[:login_response][:result][:server_url]
  @client.request.http.ssl_client_auth :verify_mode => OpenSSL::SSL::VERIFY_NONE
end

Instance Method Details

#query(query_string) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/zuora_client.rb', line 45

def query(query_string)
  begin
    response = @client.query! do |soap|
      soap.namespace = 'http://api.zuora.com/'
      soap.header['wsdl:SessionHeader'] = {'wsdl:session' => @session}
      soap.body = {'wsdl:queryString' => query_string}
    end.to_hash
  rescue Savon::SOAPFault => e
    puts e.message
    exit 1
  end

  result = []
  records = response[:query_response][:result][:records]
  if records
    ignore_fields = [:type, :ns2, :xsi]
    records = [records] unless records.is_a?(Array)
    records.each do |record|
      result << record.reject { |k, v| ignore_fields.include?(k) }
    end
  end
  result
end