Class: Freee::Api::Token

Inherits:
Object
  • Object
show all
Defined in:
lib/freee/token/client.rb

Constant Summary collapse

DEVELOPMENT_REDIRECT_URL =

Freee 開発環境用認証コードURL

'urn:ietf:wg:oauth:2.0:oob'
AUTHORIZE_URL =

Freee 認証コードURL

'https://accounts.secure.freee.co.jp/public_api/authorize'
TOKEN_URL =

Freee Token URL

'/oauth/token'

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(app_id, secret) ⇒ Token

A new instance of OAuth2 Client.

Parameters:

  • app_id (String)

    Application ID

  • secret (String)

    Secret



21
22
23
24
25
26
27
28
29
30
31
# File 'lib/freee/token/client.rb', line 21

def initialize(app_id, secret)
  options = {
    site: Parameter::SITE,
    authorize_url: AUTHORIZE_URL,
    token_url: TOKEN_URL
  }

  raise 'アプリケーションIDが入力されていません' if app_id.empty?
  raise 'Secretが入力されていません' if secret.empty?
  @client = OAuth2::Client.new(app_id, secret, options)
end

Instance Attribute Details

#clientObject (readonly)

oauth-xx client(read only)



7
8
9
# File 'lib/freee/token/client.rb', line 7

def client
  @client
end

Instance Method Details

#authorize(redirect_uri) ⇒ String

本番環境用に認証コード・アクセストークンのコールバックURLを生成

Parameters:

  • redirect_uri (String)

    redirect_url for Authentication Code

Returns:

  • (String)

    Freee 本番環境用認証コードURL



42
43
44
45
# File 'lib/freee/token/client.rb', line 42

def authorize(redirect_uri)
  raise '認証用コードを返すためのリダイレクトURLが指定されていません' if redirect_uri.empty?
  @client.auth_code.authorize_url(redirect_uri: redirect_uri)
end

#development_authorizeString

開発環境用に認証コード・アクセストークンのコールバックURLを生成

Returns:

  • (String)

    Freee 開発環境用認証コード・アクセストークン取得用URL



35
36
37
# File 'lib/freee/token/client.rb', line 35

def development_authorize
  @client.auth_code.authorize_url(redirect_uri: DEVELOPMENT_REDIRECT_URL)
end

#get_access_token(code, redirect_uri) ⇒ Hash

アクセストークン関係のパラメータを取得

Parameters:

  • code (String)

    Authentication Code

  • redirect_uri (String)

    redirect_url for Access Token

Returns:

  • (Hash)

    アクセストークン



51
52
53
54
55
56
57
58
59
# File 'lib/freee/token/client.rb', line 51

def get_access_token(code, redirect_uri)
  raise '認証用コードが存在しません' if code.empty?
  raise 'アクセストークンを返すためのリダイレクトURLが指定されていません' if redirect_uri.empty?
  begin
    @client.auth_code.get_token(code, redirect_uri: redirect_uri)
  rescue OAuth2::Error
    raise 'アクセストークンの取得に失敗しました。次の原因が考えられます。原因: 不明なクライアント、クライアント認証が含まれていない、認証コードが不正、認証コードが無効、リダイレクトURLが不正、別のクライアントに適用されている。'
  end
end

#refresh_token(access_token, refresh_token, expires_at) ⇒ Hash

リフレッシュトークンからアクセストークンを再取得

Parameters:

  • access_token (String)

    Access Token

  • refresh_token (String)

    Refresh Token

  • expires_at (Integer)

    アクセストークンの有効期限(UNIX TIME)

Returns:

  • (Hash)

    アクセストークン



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/freee/token/client.rb', line 66

def refresh_token(access_token, refresh_token, expires_at)
  raise 'アクセストークンが存在しません' if access_token.empty?
  raise 'アクセストークンの有効期限が指定されていません' if expires_at.nil?
  raise 'リフレッシュトークンが存在しません' if refresh_token.empty?
  params = {
    refresh_token: refresh_token,
    expires_at: expires_at
  }
  @access_token = OAuth2::AccessToken.new(@client, access_token, params)
  begin
    @access_token.refresh! if @access_token.expired?
  rescue OAuth2::Error
    raise 'アクセストークンの取得に失敗しました。次の原因が考えられます。原因: 不明なクライアント、アクセストークンが不正、リフレッシュトークンが不正、有効期限が不正。'
  end
end