Commit 80285ebe by mingyuan

with access token suport more params

parent 24174c61
......@@ -21,27 +21,27 @@ module Dingtalk::Api
end
def get(path, params: {}, headers: {}, base: base_host, as: nil)
with_access_token(params) do |with_token_params|
@client.get path, headers: headers, params: with_token_params, base: base, as: as
with_access_token('get', path, params, headers) 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(params) do |with_token_params|
@client.post path, payload.to_json, headers: headers, params: with_token_params, base: base
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
end
end
def post_file(path, file, params: {}, headers: {}, base: base_host)
with_access_token(params) do |with_token_params|
@client.post_file path, file, headers: headers, params: with_token_params, base: base
with_access_token('post', path, params, headers) 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(params = {}, tries = 2)
def with_access_token(method, path, params = {}, headers = {}, tries = 2)
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
Rails.logger.debug e.full_message
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
BASE
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
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?
yield 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
Rails.logger.debug e.full_message
app.refresh_access_token
......
require 'net/http'
module Dingtalk::Api
class Saas < Base
include Inner::Saas
BASE = 'https://openplatform.dg-work.cn/'
def token
......@@ -12,6 +12,22 @@ module Dingtalk::Api
}
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 = {})
headers = {
apiKey: app.app_key,
......@@ -23,7 +39,7 @@ module Dingtalk::Api
}
result = [
method,
method.upcase,
headers[:'X-Hmac-Auth-Timestamp'],
headers[:'X-Hmac-Auth-Nonce'],
path
......@@ -33,12 +49,5 @@ module Dingtalk::Api
headers.merge! 'X-Hmac-Auth-Signature': Base64.strict_encode64(signature)
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
......@@ -16,7 +16,8 @@ module Dingtalk
end
def generate_user(code)
api.token
r = api.getuserinfo(code)
binding.b
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