Commit 5471c943 by mingyuan

common params

parent 80285ebe
...@@ -21,25 +21,25 @@ module Dingtalk::Api ...@@ -21,25 +21,25 @@ module Dingtalk::Api
end end
def get(path, params: {}, headers: {}, base: base_host, as: nil) def get(path, params: {}, headers: {}, base: base_host, as: nil)
with_access_token('get', path, params, headers) do |processed_params, processed_headers| with_access_token('get', path, params, headers, nil) do |processed_params, processed_headers|
@client.get path, headers: processed_headers, params: processed_params, base: base, as: as @client.get path, headers: processed_headers, params: processed_params, base: base, as: as
end end
end end
def post(path, params: {}, headers: {}, base: base_host, **payload) def post(path, params: {}, headers: {}, base: base_host, **payload)
with_access_token('post', path, params, headers) do |processed_params, processed_headers| with_access_token('post', path, params, headers, payload) do |processed_params, processed_headers|
@client.post path, payload.to_json, headers: processed_headers, params: processed_params, base: base @client.post path, payload, headers: processed_headers, params: processed_params, base: base
end end
end end
def post_file(path, file, params: {}, headers: {}, base: base_host) def post_file(path, file, params: {}, headers: {}, base: base_host)
with_access_token('post', path, params, headers) do |processed_params, processed_headers| with_access_token('post', path, params, headers, nil) do |processed_params, processed_headers|
@client.post_file path, file, headers: processed_headers, params: processed_params, base: base @client.post_file path, file, headers: processed_headers, params: processed_params, base: base
end end
end end
protected protected
def with_access_token(method, path, params = {}, headers = {}, tries = 2) def with_access_token(method, path, params = {}, headers = {}, payload = {}, tries = 2)
app.refresh_access_token unless app.access_token_valid? app.refresh_access_token unless app.access_token_valid?
yield params.merge!(access_token: app.access_token), headers yield params.merge!(access_token: app.access_token), headers
rescue => e rescue => e
......
...@@ -20,7 +20,7 @@ module Dingtalk::Api ...@@ -20,7 +20,7 @@ module Dingtalk::Api
end end
protected protected
def with_access_token(method, path, params = {}, headers = {}, tries = 2) def with_access_token(method, path, params = {}, headers = {}, payload = {}, tries = 2)
app.refresh_access_token unless app.access_token_valid? app.refresh_access_token unless app.access_token_valid?
yield params, headers.merge!(Authorization: "Bearer #{app.access_token}", 'x-acs-dingtalk-access-token': app.access_token) yield params, headers.merge!(Authorization: "Bearer #{app.access_token}", 'x-acs-dingtalk-access-token': app.access_token)
rescue => e rescue => e
......
...@@ -5,30 +5,26 @@ module Dingtalk::Api ...@@ -5,30 +5,26 @@ module Dingtalk::Api
def token def token
headers = sign_header('POST', '/gettoken.json') headers = sign_header('POST', '/gettoken.json')
r = @client.post 'gettoken.json', nil, headers: headers, base: BASE r = @client.post 'gettoken.json', headers: headers, base: BASE
{ {
'access_token' => r.dig('content', 'data', 'accessToken'), 'access_token' => r.dig('content', 'data', 'accessToken'),
'expires_in' => r.dig('content', 'data', 'expiresIn') 'expires_in' => r.dig('content', 'data', 'expiresIn')
} }
end end
def sign_assess_header(method, path, params = {})
sign_header(method, path, params = {})
end
protected protected
def with_access_token(method, path, params = {}, headers = {}, tries = 2) def with_access_token(method, path, params = {}, headers = {}, payload = {}, tries = 2)
app.refresh_access_token unless app.access_token_valid? app.refresh_access_token unless app.access_token_valid?
processed_headers = sign_header(method, path, params = {}) processed_params = params.merge!(access_token: app.access_token)
yield params.merge!(access_token: app.access_token), processed_headers processed_headers = sign_header(method, path, processed_params, payload)
yield processed_params, processed_headers
rescue => e rescue => e
Rails.logger.debug e.full_message Rails.logger.debug e.full_message
app.refresh_access_token app.refresh_access_token
retry unless (tries -= 1).zero? retry unless (tries -= 1).zero?
end end
def sign_header(method, path, params = {}) def sign_header(method, path, params = {}, payload = {})
headers = { headers = {
apiKey: app.app_key, apiKey: app.app_key,
'X-Hmac-Auth-Timestamp': Time.now.strftime('%Y-%m-%dT%H:%M:%S.%3N%:z'), 'X-Hmac-Auth-Timestamp': Time.now.strftime('%Y-%m-%dT%H:%M:%S.%3N%:z'),
...@@ -44,7 +40,7 @@ module Dingtalk::Api ...@@ -44,7 +40,7 @@ module Dingtalk::Api
headers[:'X-Hmac-Auth-Nonce'], headers[:'X-Hmac-Auth-Nonce'],
path path
] ]
result << params.to_query if params.present? result << params.merge(payload).to_query if params.present?
signature = OpenSSL::HMAC.digest('SHA256', app.app_secret, result.join("\n")) signature = OpenSSL::HMAC.digest('SHA256', app.app_secret, result.join("\n"))
headers.merge! 'X-Hmac-Auth-Signature': Base64.strict_encode64(signature) headers.merge! 'X-Hmac-Auth-Signature': Base64.strict_encode64(signature)
end end
......
...@@ -17,7 +17,7 @@ module Dingtalk ...@@ -17,7 +17,7 @@ module Dingtalk
parse_response(response, options[:as]) parse_response(response, options[:as])
end end
def post(path, payload, headers: {}, params: {}, base: nil, **options) def post(path, payload = {}, headers: {}, params: {}, base: nil, **options)
headers['Accept'] ||= 'application/json' headers['Accept'] ||= 'application/json'
headers['Content-Type'] ||= 'application/json' headers['Content-Type'] ||= 'application/json'
url = base + path url = base + path
...@@ -25,7 +25,7 @@ module Dingtalk ...@@ -25,7 +25,7 @@ module Dingtalk
opts = { opts = {
params: params params: params
} }
opts.merge!(body: payload) if payload.present? opts.merge!(body: payload.to_json) if payload.present?
response = @http.with_headers(headers).post(url, **opts) response = @http.with_headers(headers).post(url, **opts)
parse_response(response, options[:as]) parse_response(response, options[:as])
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment