Commit 80285ebe by mingyuan

with access token suport more params

parent 24174c61
...@@ -21,27 +21,27 @@ module Dingtalk::Api ...@@ -21,27 +21,27 @@ 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(params) do |with_token_params| with_access_token('get', path, params, headers) do |processed_params, processed_headers|
@client.get path, headers: headers, params: with_token_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(params) do |with_token_params| with_access_token('post', path, params, headers) do |processed_params, processed_headers|
@client.post path, payload.to_json, headers: headers, params: with_token_params, base: base @client.post path, payload.to_json, 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(params) do |with_token_params| with_access_token('post', path, params, headers) do |processed_params, processed_headers|
@client.post_file path, file, headers: headers, params: with_token_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(params = {}, tries = 2) def with_access_token(method, path, params = {}, headers = {}, 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) yield params.merge!(access_token: app.access_token), 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
......
module Dingtalk::Api
module Inner::Saas
BASE = 'https://openplatform.dg-work.cn/'
def getuserinfo(code)
payload = {
auth_code: code
}
headers = sign_access_header('POST', '/gettoken.json', payload)
r = post 'rpc/oauth2/dingtalk_app_user.json', headers: headers, base: BASE
binding.b
if r.is_a? Hash
r['result']
else
r
end
end
end
end
...@@ -19,31 +19,10 @@ module Dingtalk::Api ...@@ -19,31 +19,10 @@ module Dingtalk::Api
BASE BASE
end end
def get(path, params: {}, headers: {}, base: base_host, as: nil)
with_access_token(headers) do |with_token_headers|
@client.get path, headers: with_token_headers, params: params, base: base, as: as
end
end
def post(path, params: {}, headers: {}, base: base_host, **payload)
with_access_token(headers) do |with_token_headers|
@client.post path, payload.to_json, headers: with_token_headers, params: params, base: base
end
end
def post_file(path, file, params: {}, headers: {}, base: base_host)
with_access_token(headers) do |with_token_headers|
@client.post_file path, file, headers: with_token_headers, params: params, base: base
end
end
protected protected
def with_access_token(headers = {}, tries = 2) def with_access_token(method, path, params = {}, headers = {}, tries = 2)
app.refresh_access_token unless app.access_token_valid? app.refresh_access_token unless app.access_token_valid?
yield headers.merge!( yield params, headers.merge!(Authorization: "Bearer #{app.access_token}", 'x-acs-dingtalk-access-token': app.access_token)
Authorization: "Bearer #{app.access_token}",
'x-acs-dingtalk-access-token': app.access_token
)
rescue => e rescue => e
Rails.logger.debug e.full_message Rails.logger.debug e.full_message
app.refresh_access_token app.refresh_access_token
......
require 'net/http'
module Dingtalk::Api module Dingtalk::Api
class Saas < Base class Saas < Base
include Inner::Saas
BASE = 'https://openplatform.dg-work.cn/' BASE = 'https://openplatform.dg-work.cn/'
def token def token
...@@ -12,6 +12,22 @@ module Dingtalk::Api ...@@ -12,6 +12,22 @@ module Dingtalk::Api
} }
end 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)
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
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 = {})
headers = { headers = {
apiKey: app.app_key, apiKey: app.app_key,
...@@ -23,7 +39,7 @@ module Dingtalk::Api ...@@ -23,7 +39,7 @@ module Dingtalk::Api
} }
result = [ result = [
method, method.upcase,
headers[:'X-Hmac-Auth-Timestamp'], headers[:'X-Hmac-Auth-Timestamp'],
headers[:'X-Hmac-Auth-Nonce'], headers[:'X-Hmac-Auth-Nonce'],
path path
...@@ -33,12 +49,5 @@ module Dingtalk::Api ...@@ -33,12 +49,5 @@ module Dingtalk::Api
headers.merge! 'X-Hmac-Auth-Signature': Base64.strict_encode64(signature) headers.merge! 'X-Hmac-Auth-Signature': Base64.strict_encode64(signature)
end end
protected
def with_access_token(params = {}, tries = 2)
yield params
rescue => e
Rails.logger.debug e.full_message
retry unless (tries -= 1).zero?
end
end end
end end
...@@ -16,7 +16,8 @@ module Dingtalk ...@@ -16,7 +16,8 @@ module Dingtalk
end end
def generate_user(code) def generate_user(code)
api.token r = api.getuserinfo(code)
binding.b
end end
end end
......
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