class Ly::Zizhuyou::API

Attributes

api_host[RW]
req_params[R]
req_url[R]
resp[R]

Public Class Methods

new(access_id, security_id, api_host = nil) click to toggle source
# File lib/ly/zizhuyou.rb, line 16
def initialize(access_id, security_id, api_host = nil)
  @access_id = access_id
  @security_id = security_id
  @api_host = api_host
end

Public Instance Methods

fingerprint(params) click to toggle source
# File lib/ly/zizhuyou.rb, line 22
def fingerprint(params)
  Digest::MD5.hexdigest @access_id + @security_id + Hash[params.sort].map {|k, v| "#{k}=#{v}"}.join
end
request(api_name, params = {}) click to toggle source
# File lib/ly/zizhuyou.rb, line 26
def request(api_name, params = {})
  @req_url = '%s/zizhuyou/standard/1.0/%s?style=json' % [@api_host, api_name]
  puts "Url: #{@req_url}"
  url = URI(@req_url)
  http = Net::HTTP.start(url.host, url.port)
  request = Net::HTTP::Post.new(url)
  request['X-ACCESS-ID'] = @access_id
  puts "\nHeaders: \n"
  puts "\tX-ACCESS-ID: #{@access_id}"
  request['X-FINGERPRINT'] = fingerprint = fingerprint(params)
  puts "\tX-FINGERPRINT: #{fingerprint}"
  request['Content-Type'] = 'application/x-www-form-urlencoded'
  request.body = URI.encode_www_form(@req_params = params)
  puts "\nParams: \n"
  @req_params.each {|k, v| puts "\t#{k}: #{v}\n"}
  puts "\nParams(Encode): #{URI.encode_www_form(@req_params = params)}\n"
  response = http.request(request)
  puts "Redirection: #{response['location']}" if response.is_a?(Net::HTTPRedirection)
  raise RequestError, "HTTP Response: #{response.code} #{response.message}" unless response.is_a?(Net::HTTPSuccess)
  @resp = response.read_body
  puts "\nResp: #{@resp}"
  result = JSON.parse(@resp)
  if result['ret_code'] != '200'
    err_msg = result['err_msg']
    if api_name == 'SingleOrderCreate' && !result['result'].nil? && !result['result']['Msg'].nil?
      err_msg += ';' + result['result']['Msg']
    end
    raise Error.new err_msg, result['ret_code'] unless 'BookableCheck GetCardTypeList'.include?(api_name) && result['ret_code'].nil?
  end
  result['result']
end