Class: StockShaker::Client::LazadaOP
- Inherits:
-
Object
- Object
- StockShaker::Client::LazadaOP
- Includes:
- StockShaker::Concern::Utility
- Defined in:
- lib/stock_shaker/client/lazada_op.rb
Instance Attribute Summary collapse
-
#common_params ⇒ Object
readonly
Returns the value of attribute common_params.
-
#rest_url ⇒ Object
readonly
Returns the value of attribute rest_url.
-
#server_url ⇒ Object
readonly
Returns the value of attribute server_url.
Class Method Summary collapse
Instance Method Summary collapse
-
#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.
- #do_signature(api_params, api_name) ⇒ Object
- #execute(request, access_token = nil) ⇒ Object
-
#initialize(server_url) ⇒ LazadaOP
constructor
A new instance of LazadaOP.
-
#perform_get(rest_url, request) ⇒ Object
REVIEW: Regarding to Regarding to Lazada Open Platform Official rubygem header_params is unused.
- #perform_post(rest_url, request) ⇒ Object
- #validates! ⇒ Object
Methods included from StockShaker::Concern::Utility
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_params ⇒ Object (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_url ⇒ Object (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_url ⇒ Object (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
.do_authorization_link ⇒ Object
104 105 106 107 108 109 110 111 112 113 |
# File 'lib/stock_shaker/client/lazada_op.rb', line 104 def self. 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 |