web-dev-qa-db-ja.com

eBay oauthトークンと更新トークン

eBayトークン認証で数日間苦労しています。新しいトークンを取得する方法を理解するのが難しいと感じています。開発者プログラムアカウントにサインアップした後、キーセットを要求して取得しました。その後、18か月間続くと約束されているAuth'n'Authトークンへのアクセスを許可します、そしてはい、トークンは取引、ショッピング、検索APIでのみ機能します。

しかし、Buy、Sell、CommerceのAPIを実行する必要がある場合は、oauthトークンを取得する必要があります。また、いわゆる「シングルユーザーアプリ」スタイルでサインインして、oauthを取得し、oauthを2時間の有効期限で取得します。

後でトークンが期限切れになり、上記のAPIへのアクセスを失います。 [トレーディング]> [セッションIDの取得]、[トレーディング]> [フェッチトークン]からトークンをフェッチしようとしましたが、フェッチIDにセッションIDを提供した後、「エンドユーザーは認証と認証サインインフローを完了していません。」と表示されます。有効な18か月のトークンがある間、それはこのエラーを返し続けます。

誰もが読んだり書いたりしている可能性のある記事の例はありますか?

18
mentorgh

これは、「新しい販売」APIのOAuthプロセスの詳細であり、auth 'n' authまたはレガシーのTrading APIではありません。本番の手順は同じですが、サンドボックス用でもあります。

あなたの混乱は不当ではありません。このAPIフローでの私自身の経験は、 公式開発フォーラム の大部分のものと同様に、ストレスに満ちています。以下は、oauth無関係なを生成する手順の詳細ですsingle、専用、アカウント、またはmultipleユーザーアカウント。

プロセス全体を説明する 公式ガイド があるので、ここでガイド全体を再作成することをためらっています。ただし、要約を提供できます(アプリを試す前に、Postmanを使用して以下に従うことをお勧めします)。

  1. ここ からクライアントIDとクライアントシークレットを収集します(これらを公開しないでください
  2. ここ からRuName(リダイレクトURL名)を生成します「アプリケーションを介してeBayからトークンを取得する」をクリックして入力しますフォーム。このフォームは、アプリケーションが自分のアカウントにアクセスできるようにユーザーがリダイレクトされるログインページの外観を構築するためのものです。次に、RuNameは列ヘッダーの真下に表示されます "RuName(eBay Redirect URL name)"
  3. 必要なスコープのリストを収集します。各APIエンドポイントには、適切なスコープ権限を持つOAuthトークンが必要です。たとえば、 インベントリ項目の作成または置換 エンドポイントには、https://api.ebay.com/oauth/api_scope/sell.inventoryスコープが必要です。図必要なエンドポイントを特定し、それぞれのAPIドキュメントにアクセスして、スコープセクションを見つけます。
  4. Getリクエストは次のようになります。

    `https://signin.sandbox.ebay.com/authorize?
    client_id=<your-client-id-value>&
    redirect_uri=<your-RuName-value>&
    response_type=code&
    scope=https%3A%2F%2Fapi.ebay.com%2Foauth%2Fapi_scope%2Fsell.account%20
    https%3A%2F%2Fapi.ebay.com%2Foauth%2Fapi_scope%2Fsell.inventory`
    

    使いやすさのために省略したa stateクエリ文字列を追加することもお勧めしますが、 それらは何であるか とOAuthに推奨される理由を調べる必要があります。

  5. ブラウザ内のこのURLは、ユーザーがアプリケーションにアカウントへのアクセスを許可するためのサインインページにリダイレクトしますが、URLのスコープに対してのみです。 PHP curlリクエストからダンプされると、リダイレクトURL自体が取得されます。重要:エンドユーザーによる署名はアプリケーションのユーザー数が1人の場合でも必要です。たとえば、クライアントのeコマースサイトがあり、クライアントに製品を送信したい場合少なくとも18か月に1回はこのプロセスを実行する必要があります(理由はすぐにわかります)。
  6. ユーザーがログインして確認すると、ブラウザに「今すぐこのウィンドウを閉じることができます」ページが表示されます。次のステップに必要な認証コードは、このページのURLにcodeクエリ文字列として含まれています。複数のユーザー向けのアプリケーションを開発していて、実際にユーザーがこのページにサインインすることを計画している場合は、前述のURLである確認応答を取得してコードを抽出するようにアプリを構成する必要があります。このコードはvery短命です。ブラウザを介して手動で取得している場合は、次のステップにすばやく進む必要があります。
  7. POSTへのリクエスト https://api.sandbox.ebay.com/identity/v1/oauth2/token へのリクエストを実行する必要があります。以下の構造を参照してください:

    HTTP method:   POST
    URL (Sandbox): https://api.sandbox.ebay.com/identity/v1/oauth2/token
    
    HTTP headers:
    Content-Type = application/x-www-form-urlencoded
    Authorization = Basic <B64-encoded-oauth-credentials> (A base64-encoded value made from your client ID and client secret, separated by colon. For example, in PHP you could generate it with: `base64_encode ("fakeclientid123:fakeclientsecret123")`)
    
    Request body (wrapped for readability):
    grant_type=authorization_code& (literally the string "authorization_code")
    code=<authorization-code-value>& (code retreived in previous step)
    redirect_uri=<RuName-value> (same RuName as earlier)
    

    成功した場合、このリクエストは次のようなものを返します。

    {
        "access_token": "v^1.1#i^1#p^3#r^1...XzMjRV4xMjg0",
        "token_type": "User token",
        "expires_in": 7200,
        "refresh_token": "v^1.1#i^1#p^3#r^1...zYjRV4xMjg0",
        "refresh_token_expires_in": 47304000
      }
    

    oauthトークンがあり、これは2時間続きます。2番目のトークンは更新トークンです。これは最長18か月間有効です。このトークンを安全に保ち、アプリで共有したり、ハードコードしたりしないでください。この時点から、アプリはこのトークンを使用して更新呼び出しを実行し、新しいoauth必要なときにいつでも使用できます。18か月が経過した後、またはユーザーが再度「アクセスを許可」の手順を実行した場合は、上記のすべてを実行して新しい更新トークンを生成する必要があります。APIその時点では変更されていません。

    18か月の寿命は、OAuth更新の通常の手順ではありません。通常、古いトークンが使用されるたびに新しい更新トークンを返す必要があります。

  8. OAuthを更新するには:

      HTTP method:   POST
      URL (Sandbox): https://api.sandbox.ebay.com/identity/v1/oauth2/token
    
      HTTP headers:
        Content-Type = application/x-www-form-urlencoded
        Authorization = Basic <B64-encoded-oauth-credentials>
    
       Request body (wrapped for readability):
          grant_type=refresh_token&
          refresh_token=<your-refresh-token-value>&
          scope=https%3A%2F%2Fapi.ebay.com%2Foauth%2Fapi_scope%2Fsell.account%20
          https%3A%2F%2Fapi.ebay.com%2Foauth%2Fapi_scope%2Fsell.inventory
    

これが役に立てば幸いです!

38
FullStackFool

それに苦労している人のために-エンコードされたコード/トークンを使用していることを確認してください。

Ebayがデコードされた更新トークンを返すため、何が問題なのかを理解しようとするのにほとんど頭を悩ませました

4
Dejell

苦労している人のために、ステップ4のURLはeBayで指定されたURLとは異なることに注意してください。 eBayのURLはhttps://auth.sandbox.ebay.com/oauth2/authorizeで始まりますが、ステップ4のURLはhttps://signin.sandbox.ebay.com/authorizeで始まります

1
Alex