class StockShaker::Client::JDCentralOP

Attributes

app_secret[R]
common_params[R]
server_url[R]

Public Class Methods

new(server_url, app_secret) click to toggle source
# 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

Public Instance Methods

do_signature(request_params) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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!() click to toggle source
# 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