class Lazada::Client

Public Class Methods

new(api_key, user_id, opts = {}) click to toggle source

Valid opts:

  • tld: Top level domain to use (.com.my, .sg, .th…). Default: com.my

  • debug: $stdout, Rails.logger. Log http requests

# File lib/lazada_dino/client.rb, line 32
def initialize(api_key, user_id, opts = {})
  @api_key = api_key
  @user_id = user_id
  @timezone = opts[:timezone] || 'Singapore'
  @raise_exceptions = opts[:raise_exceptions] || true
  @tld = opts[:tld] || ".com.my"

  # Definitely not thread safe, as the base uri is a class variable.
  # self.class.base_uri "https://api.sellercenter.lazada#{opts[:tld]}" if opts[:tld].present?
  self.class.debug_output opts[:debug] if opts[:debug].present?
end

Protected Instance Methods

process_response_errors!(response) click to toggle source
# File lib/lazada_dino/client.rb, line 70
def process_response_errors!(response)
  return unless @raise_exceptions

  parsed_response = Lazada::API::Response.new(response)

  if parsed_response.error?
    raise Lazada::APIError.new(
      "Lazada API Error: '#{parsed_response.error_message}'",
      http_code: response.code,
      response: response.inspect,
      error_type: parsed_response.error_type,
      error_code: parsed_response.error_code,
      error_message: parsed_response.error_message,
      error_detail: parsed_response.body_error_messages,
      request_http_method: response&.request&.http_method&.to_s,
      request_uri: response&.request&.uri&.to_s
    )
  end
end
request_url(action, options = {}) click to toggle source
# File lib/lazada_dino/client.rb, line 46
def request_url(action, options = {})
  current_time_zone = @timezone
  timestamp = Time.now.in_time_zone(current_time_zone).iso8601

  # options["filter"] ? filter = options.delete("filter") : filter = ""

  parameters = {
    'Action' => action,
    'Format' => 'JSON',
    'Timestamp' => timestamp,
    'UserID' => @user_id,
    'Version' => '1.0'
  }

  
  parameters = parameters.merge(options) if options.present?
  parameters = Hash[parameters.sort{ |a, b| a[0] <=> b[0] }]
  params     = parameters.to_query
  
  signature = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), @api_key, params)
  
  "https://api.sellercenter.lazada#{@tld}/?#{params}&Signature=#{signature}"
end