新・楽天市場APIを叩いても403エラーしか返ってこない。対処法は…。
さて、楽天市場の商品情報を取得するために楽天ウェブサービスの商品検索APIを利用しているのだけれど、インフラのアップグレードがあるそうで、
アプリの再登録、新しいAPIドメインへの移行、最新APIバージョンのご利用が必須となります。
…という案内が届いた。
言われるままに従来のコードを更新してみる。
まずアプリを再登録して、新しいアプリケーションIDやらアクセスキーを取得、以前のものと置き換える。
そして、これまで利用してきた API エンドポイントを、新しいやつ( https://openapi.rakuten.co.jp/ichibams/api/IchibaItem/Search/20220601) に書き換えて、試しにリクエストを送信。
…。
何度トライしても「403」エラーが返ってくる。接続を拒否られている。APIのテストフォームで生成した URL をコピーしてきて試してみても駄目。
いろいろ情報を集めてみると、どうやら、リクエスト時の HTTP ヘッダに「Origin: <アプリ登録時に入力したサイトドメイン>*」を付けてやるとリクエストが通るらしい。
* アプリを登録したときに "許可されたWebサイト" 欄に入力したドメイン。
PHP で cURL を利用する場合は以下のような感じ。
<?php
$url = 'https://openapi.rakuten.co.jp/ichibams/api/IchibaItem/Search/20220601?' ;
$param = array(
'accessKey' => 'アクセスキー' ,
'applicationId' => 'アプリケーションID' ,
'format' => 'json' ,
'keyword' => '検索ワード'
) ;
// リクエストURLを組み立て
foreach( $param as $key => $val ){
$url .= $key . '=' . $val . '&' ;
}
$url = rtrim( $url , '&' ) ; // いちおう末尾の & を削除。
// cURL の設定(最低限)
$ch = curl_init( $url ) ;
curl_setopt( $ch , CURLOPT_RETURNTRANSFER,1); // 結果を文字列として取得
curl_setopt( $ch , CURLOPT_HTTPHEADER , array('Origin: https://your_registered_domain.com')) ;
// 実行して結果を取得
$result = curl_exec( $ch ) ;
if( !$result ){
echo '[ERROR]'.curl_error( $ch ) ; // エラーの場合
}else{
echo $result ;
}
オレンジ文字の部分を、自身の環境に合わせて書き換えてください。
どうだ。

コメント