こんにちは!ユウナです。
皆さんは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を触ることができるようになりましたので、良かったです。