eBay APIの利用に必要なアクセストークンの取得方法

はじめに

アプリ上でeBay APIを利用(アカウント連携)するために必要なアクセストークン(access_token)の取得方法を整理する。

必要な手順

  • アプリ側からeBayサインインフォームに誘導
  • API利用の承認をしてもらい認証コードを取得
  • 認証コードを使ってアクセストークンを取得

eBay developers program の How does it work? によると以下のイメージ。
How does it work

OAuth全体のフローチャートは以下の通り。
OAuth全体のフローチャート

テスト用のユーザアカウントはココで作成。

アプリ側からeBayサインインフォームに誘導

認証手段としてOAuthとAuth’n’Authの2種類がある。今回は、新セキュリティのOAuthで実装する。

管理画面「Home > User Tokens (eBay Sign-In)」よりYour branded eBay Production Sign In (OAuth)のURLを取得する。

必要な情報も入力しておく:

  • Your privacy policy URL: 個人情報の取り扱いに関するページ
  • Your auth accepted URL: 承認された場合のリダイレクト先
  • Your auth declined URL: 拒否された場合のリダイレクト先

なお、「+ Add eBay Redirect URL」より、新しいアプリの設定を追加することができる。

Your branded eBay Production Sign In (OAuth) URLを叩くとサインインフォームに飛ばされる。

サインインフォーム

API利用の承認をしてもらい認証コードを取得

サインインすると以下の文章が表示される。

API利用の承認

「I agree」のクリックで承認が完了すると設定したページにリダイレクトされ、パラメータにcodeが渡ってくる。パラメータは以下のような感じ。

{
  "code"=>"v^1.1#i^1#......NA==",
  "expires_in"=>"299",
  "controller"=>"ebay",
  "action"=>"receive_auth_code"
}

認証コードを使ってアクセストークンを取得

API POSTリクエストでアクセストークンを取得する。

  • POST
    • Sandbox用: https://api.sandbox.ebay.com/identity/v1/oauth2/token
    • Production用: https://api.ebay.com/identity/v1/oauth2/token
  • Headers:
    • Content-Type: application/x-www-form-urlencoded
    • Basic Auth:
      • Username: [Client ID]
      • Password: [Client Secret]
  • Body
    • grant_type: authorization_code
    • code: [取得した認証コード]
    • redirect_uri: [RuName (eBay上のリダイレクトURL名)]

レスポンスは以下のような感じ。

{
    "access_token": "v^1.1#i^1#f^0#r^0#p^3#I^3#t..........QAAA=",
    "expires_in": 7200,
    "refresh_token": "v^1.1#i^1#f^0#I^3#r^1#p^3#t^Ul4xMF8yOk............MkMwN0M1XzJfMSNFXjEyODQ=",
    "refresh_token_expires_in": 47304000,
    "token_type": "User Access Token"
}

このaccess_tokenでAPIを利用できる。

なお、access_tokenの有効期限は7200秒(2時間)。refresh_tokenを使えばaccess_tokenを再取得することができ、その有効期限は47304000秒(547.5日)。再取得方法はこちら

所感

eBay APIドキュメント、情報が分散していて難解ですね。

Sources

兵庫県西宮市生まれのフリーランスRailsエンジニア。海外を拠点にデジタルノマド生活中。/ 前職・資格:公認会計士 / プログラミング言語:Ruby, JavaScript, HTML, CSS / 日本語・英語
コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です