※本記事はアフィリエイト広告を含みます。
- RinkerでAmazonや楽天の商品検索をするとエラーが出る
- ある日突然商品リンクの新規追加ができなくなって困っている
- プラグインを再インストールしてもAmazonも楽天も商品検索ができないし直らない
商品検索が突然使えなくなった背景には、Amazonと楽天で同時に実施されたAPI仕様変更と旧システムの完全停止が存在します。
また、rinkerの制作者が不定期更新であり、対応してくれていないという背景も合わせてお伝えしておきます。
※なお、APIとは、アプリケーション・プログラミング・インターフェースの略称であり、外部のシステム同士がデータを連携するための仕組みを指します。
本記事では、Amazon Creators APIの認証通信コード書き換え手順と、楽天デベロッパーでのアプリ再登録および許可ドメイン設定手順を解説します。
この記事を読むことで、エラーの原因を正確に把握し、他社プラグインへ乗り換えることなく現在のRinker環境のまま商品検索機能を即座に復旧できます。
原因に応じたコード修正とデベロッパー設定の更新を行うことが最も確実な解決策です。
Rinkerで商品検索が突然できなくなった2つの原因
Amazonと楽天市場の双方がセキュリティ強化およびシステム刷新を目的に、既存APIの廃止と新システムへの移行を一斉に実施しました。
既存のRinker内部コードは過去の古い接続先URLや認証ロジックにアクセスするように書かれています。
サービス提供元が旧システムの運用を停止した瞬間から、プラグインからのリクエストがすべてエラーとして弾かれる状態へ変化しました。
Amazonで発生している認証トークンエラー
AmazonではPA-API(Product Advertising API)の認証仕様変更に伴い、Creators APIへの移行が要求されています。
従来の署名生成処理やトークン取得先URLの変更に対応していない古い処理形式では、認証エラーが発生して商品データの取得に失敗します。
楽天市場で発生しているAPI仕様変更とアクセス拒否
楽天ウェブサービスは大規模なインフラアップデートを実施しました。接続先ドメインの変更に加えて、UUID形式と呼ばれる特定の識別子を用いたアプリIDとアクセスキーによる二重認証が必須化されています。
さらに、リクエスト送信元のWebサイト情報を検証する仕組みが厳格化されたため、旧コードによる通信が遮断されています。
Amazon Creators APIの認証コードを修正する手順
Amazonの通信エラーを解決するため、Rinker本体のプログラムファイルであるyyi_rinker_main.php内部に記述されているトークン取得ロジックを最新の仕様へ書き換えます。
home/サーバー名/ドメイン/public_html/wp-content/plugins/yyi-rinker
対象ファイル内のget_json_from_amazon_creator_apiメソッドに含まれるOAuth2トークンリクエスト処理を、以下のコードへ差し替えます。
修正前
PHP
$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);
修正後
PHP
$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);
上記コードに修正することで正しいアクセストークンが発行され、Amazonからの商品検索結果が正常に返却されます。
※コードを触る前は必ずバックアップもしくは以前の記述をコメントアウトで残しておくようにしましょう

楽天デベロッパーでアプリを再登録して許可設定を行う手順
楽天側の修正において重要な作業は、楽天デベロッパー管理画面でのアプリ再登録とドメイン許可設定です。
旧システムで利用していた英数字のみのアプリケーションIDは無効化されているため、新しい管理画面にてキーを新規発行します。
- 新規アプリケーションの作成
- 許可されたウェブサイトへのドメイン追加
- 発行されたAPIキーのRinker設定
新規アプリケーションの作成
楽天デベロッパーへログイン(https://webservice.rakuten.co.jp/)し、アプリ新規登録画面を開きます。

楽天デベロッパーの管理画面へログインし、アプリ新規登録画面を開きます。画面内の各入力項目には、以下の通り設定値を入力します。
Application name

Application name欄には、管理上で識別するための任意の名称を入力します。例として「Rinker Product Search」と記述します。
Application URL

Application URL欄には、運営しているブログのトップページURLを設定します。例として「https://example.com/」と入力します。
Application type

Application type欄は、選択項目からWeb Applicationを選択します。
Allowed website

Allowed website欄は、ドメイン名を記述します。
※注意点があるので、後ほど解説します。
Purpose of data usage

Purpose of data usage欄には、データの利用目的を入力します。例として「Affiliate Product Search」と英数字で記述します。
Expected QPS

Expected QPS欄には、1秒あたりの想定リクエスト数として1を入力します。
API Access Scopes

API Access Scopes欄は、一覧の中からRakuten Ichiba APIを探し、チェックボックスを有効化します。
そして最後に、CAPTCHAで画像の文字を入力して完了です。


Allowed websites(許可されたウェブサイトへのドメイン追加)の注意点
アクセス拒否エラーを回避するため、Allowed websitesの入力欄に通信を許可するドメインを指定します。
URLスキームや末尾のパス表記は除外し、ドメイン名本体とサブドメイン用のワイルドカードのみを1行ずつ記述します。
複数サイトを運営している場合は所有する全ドメインを網羅して入力します。
記述例:
numa-games.com
numaresearch.com
*.numa-games.com
*.numaresearch.com
発行されたAPIキーのRinker設定
フォームへの入力とセキュリティ認証を完了させ、登録ボタンを押下します。
登録完了画面に表示されるUUID形式のアプリケーションIDとアクセスキーの2種類、そしてアフィリエイトIDとURLもコピーしてメモしておきます。

WordPress管理画面を開き、設定メニューからRinker設定を選択します。

楽天用の設定欄へ取得したUUID形式のアプリケーションIDとアクセスキーを入力し、設定の保存を実行します。

まとめ
Rinkerで商品検索が使えなくなった問題は、Amazonと楽天のAPI仕様変更に対応することで解決できます。
Amazon側はプログラムファイル内の認証リクエスト部分を最新の通信コードへ書き換えます。
楽天側はデベロッパーダッシュボードでアプリを新規作成し、正しいドメイン許可設定を行った上で新たなキーをRinkerへ設定します。
正しい手順で設定を更新し、使い慣れたRinker環境でのスムーズな記事作成を取り戻しましょう。