eBayトークン認証で数日間苦労しています。新しいトークンを取得する方法を理解するのが難しいと感じています。開発者プログラムアカウントにサインアップした後、キーセットを要求して取得しました。その後、18か月間続くと約束されているAuth'n'Authトークンへのアクセスを許可します、そしてはい、トークンは取引、ショッピング、検索APIでのみ機能します。
しかし、Buy、Sell、CommerceのAPIを実行する必要がある場合は、oauthトークンを取得する必要があります。また、いわゆる「シングルユーザーアプリ」スタイルでサインインして、oauthを取得し、oauthを2時間の有効期限で取得します。
後でトークンが期限切れになり、上記のAPIへのアクセスを失います。 [トレーディング]> [セッションIDの取得]、[トレーディング]> [フェッチトークン]からトークンをフェッチしようとしましたが、フェッチIDにセッションIDを提供した後、「エンドユーザーは認証と認証サインインフローを完了していません。」と表示されます。有効な18か月のトークンがある間、それはこのエラーを返し続けます。
誰もが読んだり書いたりしている可能性のある記事の例はありますか?
あなたの混乱は不当ではありません。このAPIフローでの私自身の経験は、 公式開発フォーラム の大部分のものと同様に、ストレスに満ちています。以下は、oauth無関係なを生成する手順の詳細ですsingle、専用、アカウント、またはmultipleユーザーアカウント。
プロセス全体を説明する 公式ガイド があるので、ここでガイド全体を再作成することをためらっています。ただし、要約を提供できます(アプリを試す前に、Postmanを使用して以下に従うことをお勧めします)。
https://api.ebay.com/oauth/api_scope/sell.inventory
スコープが必要です。図必要なエンドポイントを特定し、それぞれのAPIドキュメントにアクセスして、スコープセクションを見つけます。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に推奨される理由を調べる必要があります。
code
クエリ文字列として含まれています。複数のユーザー向けのアプリケーションを開発していて、実際にユーザーがこのページにサインインすることを計画している場合は、前述のURLである確認応答を取得してコードを抽出するようにアプリを構成する必要があります。このコードはvery短命です。ブラウザを介して手動で取得している場合は、次のステップにすばやく進む必要があります。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更新の通常の手順ではありません。通常、古いトークンが使用されるたびに新しい更新トークンを返す必要があります。
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
これが役に立てば幸いです!
それに苦労している人のために-エンコードされたコード/トークンを使用していることを確認してください。
Ebayがデコードされた更新トークンを返すため、何が問題なのかを理解しようとするのにほとんど頭を悩ませました
苦労している人のために、ステップ4のURLはeBayで指定されたURLとは異なることに注意してください。 eBayのURLはhttps://auth.sandbox.ebay.com/oauth2/authorize
で始まりますが、ステップ4のURLはhttps://signin.sandbox.ebay.com/authorize
で始まります