Commit 5471c943 by mingyuan

common params

parent 80285ebe
......@@ -21,25 +21,25 @@ module Dingtalk::Api
end
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
end
end
def post(path, params: {}, headers: {}, base: base_host, **payload)
with_access_token('post', path, params, headers) do |processed_params, processed_headers|
@client.post path, payload.to_json, headers: processed_headers, params: processed_params, base: base
with_access_token('post', path, params, headers, payload) do |processed_params, processed_headers|
@client.post path, payload, headers: processed_headers, params: processed_params, base: base
end
end
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
end
end
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?
yield params.merge!(access_token: app.access_token), headers
rescue => e
......
......@@ -20,7 +20,7 @@ module Dingtalk::Api
end
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?
yield params, headers.merge!(Authorization: "Bearer #{app.access_token}", 'x-acs-dingtalk-access-token': app.access_token)
rescue => e
......
......@@ -5,30 +5,26 @@ module Dingtalk::Api
def token
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'),
'expires_in' => r.dig('content', 'data', 'expiresIn')
}
end
def sign_assess_header(method, path, params = {})
sign_header(method, path, params = {})
end
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?
processed_headers = sign_header(method, path, params = {})
yield params.merge!(access_token: app.access_token), processed_headers
processed_params = params.merge!(access_token: app.access_token)
processed_headers = sign_header(method, path, processed_params, payload)
yield processed_params, processed_headers
rescue => e
Rails.logger.debug e.full_message
app.refresh_access_token
retry unless (tries -= 1).zero?
end
def sign_header(method, path, params = {})
def sign_header(method, path, params = {}, payload = {})
headers = {
apiKey: app.app_key,
'X-Hmac-Auth-Timestamp': Time.now.strftime('%Y-%m-%dT%H:%M:%S.%3N%:z'),
......@@ -44,7 +40,7 @@ module Dingtalk::Api
headers[:'X-Hmac-Auth-Nonce'],
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"))
headers.merge! 'X-Hmac-Auth-Signature': Base64.strict_encode64(signature)
end
......
......@@ -17,7 +17,7 @@ module Dingtalk
parse_response(response, options[:as])
end
def post(path, payload, headers: {}, params: {}, base: nil, **options)
def post(path, payload = {}, headers: {}, params: {}, base: nil, **options)
headers['Accept'] ||= 'application/json'
headers['Content-Type'] ||= 'application/json'
url = base + path
......@@ -25,7 +25,7 @@ module Dingtalk
opts = {
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)
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