Class: StockShaker::Client::LazadaOP

Inherits:
Object
  • Object
show all
Includes:
StockShaker::Concern::Utility
Defined in:
lib/stock_shaker/client/lazada_op.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from StockShaker::Concern::Utility

#to_query_params

Constructor Details

#initialize(server_url) ⇒ LazadaOP

Returns a new instance of LazadaOP.



16
17
18
19
20
21
22
23
24
25
26
# File 'lib/stock_shaker/client/lazada_op.rb', line 16

def initialize(server_url)
  @common_params = {
    app_key: StockShaker.config.lazada_config.app_key,
    timestamp: (Time.now.to_f * 1000).to_i,
    sign_method: 'sha256'
  }
  @server_url = server_url
  @rest_url = nil

  validates!
end

Instance Attribute Details

#common_paramsObject (readonly)

Returns the value of attribute common_params.



14
15
16
# File 'lib/stock_shaker/client/lazada_op.rb', line 14

def common_params
  @common_params
end

#rest_urlObject (readonly)

Returns the value of attribute rest_url.



14
15
16
# File 'lib/stock_shaker/client/lazada_op.rb', line 14

def rest_url
  @rest_url
end

#server_urlObject (readonly)

Returns the value of attribute server_url.



14
15
16
# File 'lib/stock_shaker/client/lazada_op.rb', line 14

def server_url
  @server_url
end

Class Method Details



104
105
106
107
108
109
110
111
112
113
# File 'lib/stock_shaker/client/lazada_op.rb', line 104

def self.do_authorization_link
  params = {
    response_type: 'code',
    force_auth: true,
    client_id: StockShaker.config.lazada_config.app_key,
    redirect_uri: StockShaker.config.lazada_config.redirect_url
  }

  "#{StockShaker::Client::LAZADA_API_AUTH_URL}?#{to_query_params(params)}"
end

Instance Method Details

#do_rest_url(api_name) ⇒ Object

REVIEW: Regarding to Lazada Open Platform Official rubygem Can’t use to_query method for @common_params Parse hash to query string by manually



59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/stock_shaker/client/lazada_op.rb', line 59

def do_rest_url(api_name)
  raise 'Signature should not be blank. Please generate signature by LazadaOP#do_signature.' if @common_params[:sign].blank?
  length = @server_url.length
  rest_url = @server_url[(length - 1)] == '/' ? @server_url.chomp!('/') : @server_url

  common_params_string = ''
  @common_params.each do |key, value|
    common_params_string += '&' unless common_params_string.blank?
    common_params_string += "#{key}=#{value}"
  end
  "#{rest_url + api_name}?#{common_params_string}"
end

#do_signature(api_params, api_name) ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/stock_shaker/client/lazada_op.rb', line 42

def do_signature(api_params, api_name)
  params = api_params.nil? ? @common_params : @common_params.merge(api_params)
  sort_arrays = params.sort_by { |key, _value| key.to_s }

  # See signature pattern : https://open.lazada.com/doc/doc.htm?spm=a2o9m.11193531.0.0.40ed6bbemuDwkW#?nodeId=10451&docId=108069
  signature_base_string = api_name.to_s
  sort_arrays.each { |key, value| signature_base_string += "#{key}#{value}" }

  sign_digest = OpenSSL::Digest.new('sha256')
  secret_key = StockShaker.config.lazada_config.app_secret_key
  OpenSSL::HMAC.hexdigest(sign_digest, secret_key, signature_base_string).upcase
end

#execute(request, access_token = nil) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/stock_shaker/client/lazada_op.rb', line 28

def execute(request, access_token = nil)
  @common_params[:access_token] = access_token if access_token
  @common_params[:sign] = do_signature(request.api_params, request.api_name)
  @rest_url = do_rest_url(request.api_name)
  if request.http_method == :post
    perform_post(@rest_url, request)
  else
    perform_get(@rest_url, request)
  end

rescue StandardError => err
  raise "#{@rest_url}, HTTP_ERROR, #{err.message}"
end

#perform_get(rest_url, request) ⇒ Object

REVIEW: Regarding to Regarding to Lazada Open Platform Official rubygem header_params is unused.



74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/stock_shaker/client/lazada_op.rb', line 74

def perform_get(rest_url, request)
  query_params = request.api_params.blank? ? '' : to_query_params(request.api_params)
  url = "#{rest_url}&#{query_params}"

  response = RestClient::Request.execute(
    method: request.http_method,
    url: url,
    headers: request.header_params,
    read_timeout: 30,
    open_timeout: 15
  )
  JSON.parse(response)
end

#perform_post(rest_url, request) ⇒ Object



88
89
90
91
92
93
94
95
96
97
98
# File 'lib/stock_shaker/client/lazada_op.rb', line 88

def perform_post(rest_url, request)
  response = RestClient::Request.execute(
    method: request.http_method,
    url: rest_url,
    payload: request.api_params,
    headers: request.header_params,
    read_timeout: 30,
    open_timeout: 15
  )
  JSON.parse(response)
end

#validates!Object



100
101
102
# File 'lib/stock_shaker/client/lazada_op.rb', line 100

def validates!
  raise 'server_url is required' unless @server_url
end