【ebay】タグの記事一覧|退会専科 https://taikaisenka.com 退会手順のことなら退会専科へ! Sat, 17 Sep 2022 15:08:57 +0000 ja hourly 1 https://wordpress.org/?v=6.2.2 【ebay API】Token type in the Authorization header is invalidのエラー解決 https://taikaisenka.com/ebay-apitoken-type-in-the-authorization-header-is-invalid/ https://taikaisenka.com/ebay-apitoken-type-in-the-authorization-header-is-invalid/#respond Mon, 11 Oct 2021 12:57:48 +0000 https://taikaisenka.com/?p=440

こんにちは!ユウナです。

世界的ECサイトebayでは、developerに登録すると検索APIや出品API、出品削除APIなどさまざまな機能をプログラム上から使用することができます。

今回は、ebay APIを使用した際に出たエラー「Token type in the Authorization header is invalid」を解決する方法を紹介していきます。

※本稿では、PHPを使っています。他の言語でも似たような構文になるはずですので、参考にしてみてください。

ebay APIを使用するためには、developerプログラムに参加したり、下記記事のようにアラート&通知を設定したりする必要があります。

https://taikaisenka.com/ebay-developer-api-setting/

本稿では、それらの各種設定はすでに登録済みであり、実際にアプリケーションキーが発行され使用できる状態であることを想定しています。

そのため、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キーが違うといわれています。

解決策

  1. ヘッダーには bearer を設定する
  2. 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サイトやスマホアプリを作っていきたいという方には、強くおすすめしています!

]]>
https://taikaisenka.com/ebay-apitoken-type-in-the-authorization-header-is-invalid/feed/ 0
【eBayデベロッパーAPI】設定方法 exemption/Marketplace Account Deletion/Closure notifications https://taikaisenka.com/ebay-developer-api-setting/ https://taikaisenka.com/ebay-developer-api-setting/#respond Thu, 22 Jul 2021 01:07:57 +0000 https://taikaisenka.com/?p=135

こんにちは!ユウナです。

皆さんはeBayを使ったことありますか?世界最大級のマーケットプレイスとして25年以上続く、オークションサイトです。

このサイトを利用しているのは世界中に1億7000万人以上いるといわれている、とても規模がでかいサービスです。

ユウナ

私は時々不用品を売る時に使ったりしています

私はプログラミングが趣味なのですが、今回その勉強を兼ねて、ebayAPIを使ってみることにしました。

しかしebayAPIを使用するにあたって必要な設定や、疎通確認用のプログラム作成が必要になることが分かり、少し躓いたので、その手順を紹介していきます。

※すでにeBay開発者サイト(https://developer.ebay.com/)には登録してあると想定しています。未登録の場合は、上記リンクから登録してください。

課題:アプリケーションキーを発行しようとすると「subscribe to eBay Marketplace Account Deletion/Closure notifications or apply for an exemption」となる

eBayデベロッパープログラムに登録し、Appliation Keyを発行しようとすると下記図のような文言が出て、本番環境用のキー(Production)が発行できないことが分かります。

(※ごめんなさい。スクショ忘れたので事後画面です。。)

なぜそうなるかというと、簡単に言えば、eBay側が異常を察知したユーザアカウントを削除してほしいために、ちゃんと正しく連絡が取れる開発者であることを認証したいため、らしいです。

詳細は公式サイト⇒ https://developer.ebay.com/marketplace-account-deletion にありますので、興味があれば見てみて下さい。

さて、この承認を得られないとそもそもeBayのAPIを使うことができないので、何としても通過する必要があります!次の章で解説していますので、さっそく見ていきましょう。

解決手順

1.デベロッパープログラムにログインする

https://developer.ebay.com/からログインします。

「Sign in」>「Appliation access keys」

2.「Alerts & Notifications」タブを開き、各種設定する

https://developer.ebay.com/my/push?env=production&index=0へ行くか、「subscribe to eBay Marketplace Account Deletion/Closure notifications or apply for an exemption」リンクを押して、「アラート&通知」タブを開きます。

次に、下記図のように設定していきます。

  • Event Notification Delivery Method・・・Marketplace Account Deletionを選択
  • Email to notify if marketplace account deletion notification endpoint is down・・・自身のメールアドレスを入力します。
    ※ebay側に登録しているアドレスでなくても問題なかったです。Gmailでも可でした。
  • Marketplace account deletion notification endpoint・・・ebay側からGETリクエストが出されるので、その受信先のURLを入力します。
  • Verification token・・・32文字以上で大文字小文字数字、アンダーバー、ハイフンが入った文字列を入力します。

私が入力した値を参考までに紹介します。

  • ②メールアドレス・・・xxxxxxx@gmail.com
  • ③エンドポイント・・・https://(ドメイン).com/ebayApi/notificationsReceiver.php
  • 認証文字列・・・パスワード生成サイト(https://www.luft.co.jp/cgi/randam.php)で作りました。

メールアドレスを設定したら「Edit」を押して保存します。

エンドポイントと認識文字列を入力したら「Edit」を押して保存します。

3.ebay側からの受信用プログラムを作る

作り方はPHPでもJavaでもなんでも大丈夫です。要はebay側から送信されたGETリクエストに呼応するプログラムがあればいいだけですので!

細かく知りたい方はこちら⇒https://developer.ebay.com/marketplace-account-deletion英文ですが、ここから読めます。

以下に私が動かしたプログラムを載せておきますので、自由に使ってみてください。

<?php

header('HTTP/1.1 200 OK');
$endpointURL = 'https://(ドメイン).com/ebayApi/notificationsReceiver.php';
$verificationToken = '32文字以上の自由文字列(認証文字列)';

if(isset($_GET['challenge_code']))
{
    header('Content-Type: application/json');
    $d = $_GET['challenge_code'].$verificationToken.$endpointURL;
    $hd = array("challengeResponse"=>hash("sha256", $d));
    echo(json_encode($hd));

}

はい、これだけです。

簡単に解説すると、

「eBay will send a challenge code to that URL in the form of a GET call(EbayはチャレンジコードをGETメソッドによってコールします)」とあるので、GETによって来ることが分かります。

PHPでは$_GET[‘challenge_code‘]となりますね。

次に、「eBay with a 200 OK and the hashed value through a challengeResponse field in JSON format(応答コード:200 OKと、下記に示す並び順でハッシュ化した値をJSONにしてください)」とあるので、

header(‘HTTP/1.1 200 OK’);

header(‘Content-Type: application/json’);

$hd = array(“challengeResponse”=>hash(“sha256”, $d));

echo(json_encode($hd));

で表現しています。

最後に、JSONの並び順ですが、「challengeCode + verificationToken + endpoint.」とあるので

$d = $_GET[‘challenge_code’].$verificationToken.$endpointURL;

となります。

4.動作確認

ここまで出来たら、Ebayデベロッパープログラム側に戻り「Send Test Notifications」ボタンを押します。

すると、このようなGETパラメータが届きます。

challenge_code=123….049564…2a2

下記図のように「Marketplace account deletion notification endpoint settings successfully saved.」となれば、正常に認証されたということになります。

productionのアプリケーションキーも生成されていることが確認できますね。

お疲れ様でした。これで完了です!

海外のサイトですが、参考サイトも載せておきます。⇒https://forums.developer.ebay.com/questions/41792/computing-the-challengeresponse-for-the-marketplac.html

結び

英語の文書を読むことがまだまだ障壁に感じますが、Ebayは結構親切なサービスだと思います。

不親切なサービスだと、ここまで丁寧に書かれていないのでかなり試行錯誤してしまいます。

何はともあれ、これでEbayAPIを触ることができるようになりましたので、良かったです。

]]>
https://taikaisenka.com/ebay-developer-api-setting/feed/ 0