こんにちは!ユウナです。
世界的ECサイトebayでは、developerに登録すると検索APIや出品API、出品削除APIなどさまざまな機能をプログラム上から使用することができます。
今回は、ebay APIを使用した際に出たエラー「Token type in the Authorization header is invalid」を解決する方法を紹介していきます。
※本稿では、PHPを使っています。他の言語でも似たような構文になるはずですので、参考にしてみてください。
ebay APIを使用するためには、developerプログラムに参加したり、下記記事のようにアラート&通知を設定したりする必要があります。
本稿では、それらの各種設定はすでに登録済みであり、実際にアプリケーションキーが発行され使用できる状態であることを想定しています。
そのため、developerへの登録方法やアラート&通知の設定方法などは他の記事をお読みくださいm(__)m
エラー内容
'{
"errors" : [ {
"errorId" : 1003,
"domain" : "OAuth",
"category" : "REQUEST",
"message" : "Token type in the Authorization header is invalid:AgAAAA**AQAAA...",
"longMessage" : "Token type in the Authorization header is invalid:AgAAAA**AQAAA..."
} ]
}'
エラー番号1002が出た場合は、HTTPリクエストのheader内に認証キーがないことが原因です。本件と同じ方法で対処可能なので、解決方法の参考にしてみてください。
{
"errors" : [ {
"errorId" : 1002,
"domain" : "OAuth",
"category" : "REQUEST",
"message" : "Missing access token",
"longMessage" : "Access token is missing in the Authorization HTTP request header."
} ]
}
やったこと/サンプルプログラム
今回私がやりたかったことは、ebay APIを使って、キーワード検索をすることです。
そのため、公式ドキュメント「Search」を読みながら、下記のように組みました。
//検索API URL
private const URL_SEARCH = 'https://api.ebay.com/buy/browse/v1/item_summary/search?q=254/s-p';
function searchAPI(){
$headers=[
'Authorization:AgAAAA**..........',
];
$ch = curl_init(self::URL_SEARCH);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$curlres = curl_exec($ch);
curl_close($ch);
var_dump($curlres);
}
すると結果は「エラー内容」で示した通りになりました。
つまり、APIキーが違うといわれています。
解決策
- ヘッダーには bearer を設定する
- Auth’n Authではなく、OAuthキーを使用する
こちらの海外の記事がビンゴでした。とても助かりました。
Token type in the Authorization header is invalid,ebay api
ebayは海外発のサイトですのでやっぱり日本語サイトより英語圏サイトの方がQ&Aも充実してますね。
下記図をご覧ください。
developerサイトにログインして表示したUserTokensページです。
私は最初、「Auth’n Auth」を選択して表示されるキー(A始まり)を認証キーに設定していました。

しかし、「参考欄」に挙げた海外サイトでは、
Authorization: Bearer v^10#t^H5sI…. // your token
となっています。
つまり、そもそも使用するキーも違っていたのです。
「Bearerを付与」+「v始まりのキー(OAuth)」を使用することで、うまくいきました。
※OAuthは上記画像にある画面で、「Get OAuth Application Token」をクリックすることで表示されます。
解決後のプログラム
//検索API URL
private const URL_SEARCH = 'https://api.ebay.com/buy/browse/v1/item_summary/search?q=254/s-p';
function 解決後(){
$headers = [
'Authorization: Bearer ' . 'v^1.1#........................,
];
$ch = curl_init(self::URL_SEARCH);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$curlres = curl_exec($ch);
curl_close($ch);
var_dump($curlres);
}
結果は以下の通りです。
{
"href":"https://api.ebay.com/buy/browse/v1/item_summary/search?q=254%2Fs-p&limit=50&offset=0",
"total":17,
"next":"https://api.ebay.com/buy/browse/v1/item_summary/search?q=254%2Fs-p&limit=50&offset=50",
"limit":50,
"offset":0,
"itemSummaries":[{"itemId":"v1|294431348446|0",
"title":"Pokemon Crad Promo celebration fanfare CHAMPION SHIP SERIES 2021 254/S-P TCG ",
"image":{"imageUrl":"https://i.ebayimg.com/thumbs/images/g/CEYAAOSwFXphVug-/s-l225.jpg"},
"price":{"value":"234.41",
"currency":"USD"},
"itemHref":"https://
... (中略)
}
ちゃんとデータが取れていることが分かりますね!
お疲れ様でした。
結び
ebayAPIは、もともとXML形式でリクエストすることができました。(XMLかSOAP形式)
ですが最近アップデートされて、XMLでのリクエストが非推奨になり、新しくREST API形式でのリクエスト手法に切り替わっていました。
確かにセキュリティ面や保守面、現在のWEB環境を踏まえるとこの移行は妥当なのかもしれませんね。
今後はどのAPIもRESTful形式での問い合わせが一般的になってくると思うので、headerに持たせる認証コードの書き方は覚えておくと、アドバンテージがあるかもしれません。
何はともあれ、私がしたかった実装ができたので、めでたしです!
少額でプログラミングを学ぶなら!【ココナラ】
ココナラは、一般の方が自身のスキルを公開して、手助けをするサービスです。
私も時々使っています。クラウドワークスでは企業案件もあるため、こちらが支払う金額も本格的な金額になってしまいます。
その反面、ココナラでは副業やちょっとしたお小遣い稼ぎのために自身のスキルを販売している層が多いため、比較的安価で悩みを解決してくれます。
今回のようにちょっとしたプログラムの一部改修をお願いするなら、おすすめなサービスです。
有料でプログラミングを学ぶなら!【テックアカデミー】
テックアカデミーでは、JavaやPHP、Swiftなどさまざまなプログラミング言語を取り扱っています。いろんなコースがあります。WEB作成やスマホアプリコースなど、プログラミングスクール業界随一です。
私も2016年10月から3か月コースで入校した経験があります。(その時は3ケ月で学費は約16万円ほどでした)
そこで身についた、「自分で検索して自己解決する力」と「トライ&エラーを繰り返してまずは手を動かしてみる」考え方が今でも活きています。
私も通った経験があるこのテックアカデミーは、授業内容も濃いですし、Lineに似たチャット(Slack)を使うことで講師の方といつでも会話することができます。
これから本格的なWEBサイトやスマホアプリを作っていきたいという方には、強くおすすめしています!