Class: StockShaker::Client::JDCentralOP

Inherits:
Object
  • Object
show all
Defined in:
lib/stock_shaker/client/jd_central_op.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(server_url, app_secret) ⇒ JDCentralOP

Returns a new instance of JDCentralOP.



12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/stock_shaker/client/jd_central_op.rb', line 12

def initialize(server_url, app_secret)
  @common_params = {
    timestamp: DateTime.now.strftime('%F %T.%L%z'),
    format: 'json',
    v: '1.0'
  }

  @server_url = server_url
  @app_secret = app_secret

  validates!
end

Instance Attribute Details

#app_secretObject (readonly)

Returns the value of attribute app_secret.



10
11
12
# File 'lib/stock_shaker/client/jd_central_op.rb', line 10

def app_secret
  @app_secret
end

#common_paramsObject (readonly)

Returns the value of attribute common_params.



10
11
12
# File 'lib/stock_shaker/client/jd_central_op.rb', line 10

def common_params
  @common_params
end

#server_urlObject (readonly)

Returns the value of attribute server_url.



10
11
12
# File 'lib/stock_shaker/client/jd_central_op.rb', line 10

def server_url
  @server_url
end

Class Method Details

TODO: May be JD Central issued this in the future



69
# File 'lib/stock_shaker/client/jd_central_op.rb', line 69

def self.do_authorization_link; end

Instance Method Details

#do_signature(request_params) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/stock_shaker/client/jd_central_op.rb', line 34

def do_signature(request_params)
  # Sort key by ASCII rule
  sorted_params = request_params.sort_by { |key, _value| key }

  # Create sign_base_string
  sign_base_string = @app_secret
  sorted_params.each { |key, value| sign_base_string += "#{key}#{value}" }
  sign_base_string += @app_secret

  # Conditional sign by sign_method
  if request_params[:sign_method].include?('hmac')
    digest = OpenSSL::Digest.new('sha256')
    OpenSSL::HMAC.hexdigest(digest, @app_secret, sign_base_string).upcase
  else
    Digest::MD5.hexdigest(sign_base_string).upcase
  end
end

#execute(request) ⇒ Object



25
26
27
28
29
30
31
32
# File 'lib/stock_shaker/client/jd_central_op.rb', line 25

def execute(request)
  request_params = @common_params.merge(**request.api_params, **request.business_params)
  request_params[:sign] = do_signature(request_params)

  request.add_header_params('charset', 'utf-8')

  perform(request, request_params.as_json)
end

#perform(request, request_params) ⇒ Object



52
53
54
55
56
57
58
59
60
61
# File 'lib/stock_shaker/client/jd_central_op.rb', line 52

def perform(request, request_params)
  RestClient::Request.execute(
    method: request.http_method,
    payload: request_params,
    url: @server_url,
    headers: request.header_params
  )
rescue StandardError => err
  err
end

#validates!Object



63
64
65
66
# File 'lib/stock_shaker/client/jd_central_op.rb', line 63

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