【Rinkerのエラー対応】Creators API優先の設定方法について

Web・プログラミング学習
スポンサーリンク
スポンサーリンク

「【エラー】このアクセスキーは、Product Advertising APIにアクセスするために有効になっていません。AWS認証情報を利用している場合はProduct Advertising APIで取得し直してください。』エラーへの対応

久しぶりにRinkerを使って商品リンクを作成しようとしたところ、以下のようなエラーが発生して商品情報の取得に失敗しました。

【エラー】このアクセスキーは、Product Advertising APIにアクセスするために有効になっていません。AWS認証情報を利用している場合はProduct Advertising APIで取得し直してください。

このエラーが出る場合、

・Amazonアソシエイトで Creators API の認証情報を新規発行
・Rinkerの設定で発行したCreators API の認証情報を使用するように変更

をする必要があるようです。

Amazonアソシエイトで Creators API の認証情報を新規発行

Amazonアソシエイトのページにアクセスし、右上のメニューアイコンを開きます。

メニュー一覧から「ツール」を選択します。

「ツール」→「クリエイターAPI」を選択します。

クリエイターAPIの画面の「アプリケーション」で「アプリケーション作成」ボタンを押します。

アプリケーション名は任意の名前でOKです。Rinkerで使うので「rinker」とし、「作成する」ボタンを押しました。

アプリケーションを作成すると「新しい認証情報を追加」ボタンが表示されるので、これを押します。

すると、新しい認証情報が表示されるので、「認証情報ID」「シークレット」「バージョン」の内容をコピーしておきます。念のため「CSVをダウンロードする」ボタンを押して、これらの情報を保存しておきます。

Rinkerの設定で発行したCreators API の認証情報を使用するように変更

WordPressの「プラグイン」→「Rinker設定」に進みます。

「Amazon」のメニューで「Creators API優先」を選択します。Rinkerプラグイン自体のバージョンが古い場合は、このメニューが表示されなかったので、その場合にはRinkerプラグインを更新します。

Amazonアソシエイトで新規発行し、控えておいた認証情報「認証情報ID」「シークレット」「バージョン」をそれぞれ入力します。(一部伏字にしています)

設定変更が終わったら、一番下の「変更を保存」ボタンを押します。

「【エラー】401:AmazonAPIのステータスエラー: {“message”:”The authentication token is invalid or malformed”,”reason”:”InvalidToken”,”type”:”UnauthorizedException”} AmazonAPIのステータスエラー」への対応

再度Rinkerで商品リンクを作成しようとしたところ、次は以下のようなエラーが発生しました。

【エラー】401:AmazonAPIのステータスエラー: {“message”:”The authentication token is invalid or malformed”,”reason”:”InvalidToken”,”type”:”UnauthorizedException”} AmazonAPIのステータスエラー

調べてみるとRinkerプラグイン側の実装が古くなっているため、現在のCreators APIの仕様に対応するように、プラグイン自体のコードを書き換える必要があるとのことでした。

Rinkerプラグインのコード修正箇所

WordPressのメニューで「プラグイン」→「プラグインファイルエディター」を開きます。

・「編集するプラグインを選択」→「Rinker」を選んで「選択」ボタン
・編集するプラグインファイルは「yyi-rinker/yyi_rinker_main.php」となります。

修正するコードは2286行付近のコードになります。

変更する前に、バックアップを取得しておくと良いと思います。

修正前のコード

$curl = curl_init();
$auth_creds = $creator_auth_id . ':' . $creator_secret_key;
$headers = [
    'Content-Type: application/x-www-form-urlencoded',
    'Authorization: Basic ' . base64_encode($auth_creds),
];
curl_setopt($curl, CURLOPT_URL, 'https://creatorsapi.auth.us-west-2.amazoncognito.com/oauth2/token');
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($curl, CURLOPT_POSTFIELDS, 'grant_type=client_credentials&scope=creatorsapi/default');
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);

修正後のコード

$curl = curl_init();
$headers = [
    'Content-Type: application/json',
];
$token_payload = json_encode([
    'grant_type'    => 'client_credentials',
    'client_id'     => $creator_auth_id,
    'client_secret' => $creator_secret_key,
    'scope'         => 'creatorsapi::default',
]);
curl_setopt($curl, CURLOPT_URL, 'https://api.amazon.co.jp/auth/o2/token');
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($curl, CURLOPT_POSTFIELDS, $token_payload);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);

再度Rinkerで商品検索をしてみると正常に商品情報を取得できるようになりました。

タイトルとURLをコピーしました