Yahoo!ショッピングAPIのサンプルを書いた(プロフェッショナル出店ストア向けAPI)
概要
Yahoo!ショッピングに出店しているが、調べても欲しい機能がなかったので自分で作ることにした。
Yahoo!ショッピングの注文情報を取得するためには、Yahoo!ショッピングAPIを利用せよとのこと。
Yahoo!ショッピングAPIとは、プロフェッショナル出店のストアと連携したアプリケーションを開発するための定型プログラム群なのである。(利用は無料)
詳しくは下記のサイトへどうぞ。
developer-ec.yahoo.co.jp
前提条件
Yahoo!ショッピングAPIを利用するにあたり、次の条件を満たしている必要がある。
ちなみに今回は、サーバーサイド(Yahoo! ID連携 v1)アプリケーションをPHPで開発していくことにした。
注文APIを利用申請すると、Yahoo!ショッピングテクニカルサポートから次のようなメールが届く。
赤字で囲っている部分のアプリケーションIDとサーバーのIPアドレスが一致してないと、当然プログラムは動かずエラーになるので注意!
また注文検索APIは扱う情報のセキュリティの観点から、アクセストークンが短くなっているとのことだ。
■注文APIの諸注意
注文API http://developer.yahoo.co.jp/webapi/shopping/order/
orderList, orderInfo, orderChangeの3点のAPIにつきましては、扱う情報のセキュリティの観点から他のAPIとは異なり、トークン取得からユーザが再認可をしてトークンの更新を必要とする期間が短くなっており、最大12時間となりますのでご注意ください。
orderList: http://developer.yahoo.co.jp/webapi/shopping/orderList.html
orderInfo http://developer.yahoo.co.jp/webapi/shopping/orderInfo.html
orderChange http://developer.yahoo.co.jp/webapi/shopping/orderChange.html上記の3点のAPIに対して、ご申請のアプリケーションIDには最大時間の12時間で設定しておりますのでご了承下さい。
初期設定
Yahoo!デベロッパーネットワークにアクセスして、[アプリケーションの管理]から該当する[アプリケーションの詳細]を開く。
次の設定を確認しておく。
(1)アプリケーションID
(2)シークレット
(3)コールバックURL
(4)ストア向け操作関連の機能(開示先限定スコープ)
今回のプログラムでは、「index.php(転送) ⇒ OAuth2.0(認証) ⇒ callback.php(処理)」と遷移するため、最終的に処理を行うcallback.phpのURLアドレスをコールバックURLに設定しておく。
またストア向け操作関連の機能(開示先限定スコープ)にチェックが入っていないと、プロフェッショナル出店のストアと連携できないので注意。
サンプルプログラム
Yahoo!ショッピングAPIを利用するには、ライブラリを使ったりJavaScriptを使ったりする方法があるけど、一番シンプルに必要最低限のコードをPHPで組むことにした。
まずは「index.php」のサンプル。アプリケーションIDとコールバックURLをYahoo!デベロッパーネットワークの設定に書き換えること。
<?php $app_id = "<ここにあなたのアプリケーションID>"; // アプリケーションID(1) $redirect_uri = "http://hoge.com/yahoo/callback.php"; // コールバックURL(3) $url = "https://auth.login.yahoo.co.jp/yconnect/v1/authorization"; $nonce = substr(str_shuffle('1234567890abcdefghijklmnopqrstuvwxyz'), 0, 10); $data = http_build_query( array('response_type' => 'code id_token', 'client_id' => $app_id, 'nonce' => $nonce, 'redirect_uri' => $redirect_uri ) ); header('location: ' . $url.'?'.$data); exit; ?>
次に「callback.php」のサンプル。アプリケーションIDとシークレット、コールバックURLをYahoo!デベロッパーネットワークの設定に書き換えること。
ストアアカウントは、あなたが出店しているYahoo!ストアURLの○○部分。
例)https://store.shopping.yahoo.co.jp/○○/
<?php // ------------------------------------------------ 初期設定 $applicationId = "<ここにあなたのアプリケーションID>"; // アプリケーションID(1) $secret = "<ここにあなたのシークレット>"; // シークレット(2) $redirect_uri = "http://hoge.com/yahoo/callback.php"; // コールバックURL(3) $sellerId = "<ここにあなたのストアアカウント>"; // ストアアカウント // ------------------------------------------------ アクセストークン取得 $basicAuth = base64_encode($applicationId . ':' . $secret); $header = array( "Authorization: Basic " . $basicAuth, "Content-Type: application/x-www-form-urlencoded;charset=UTF-8", ); $post_data = array( 'grant_type' => 'authorization_code', 'code' => $_GET['code'], 'redirect_uri' => $redirect_uri, ); $url = "https://auth.login.yahoo.co.jp/yconnect/v1/token"; $ch = curl_init($url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post_data)); $json = curl_exec($ch); curl_close($ch); $data = json_decode($json, true); $access_token = $data["access_token"]; // ------------------------------------------------ 注文情報取得 $header = array( 'Authorization: Bearer ' . $access_token, "Content-Type: application/x-www-form-urlencoded;charset=UTF-8", ); $post_xml = "<Req> <SellerId>{$sellerId}</SellerId> <Search> <Field>OrderId,BillFirstName</Field> <Result>100</Result> <Sort>+order_time</Sort> <Condition> <OrderTimeFrom>20171001000000</OrderTimeFrom> <OrderTimeTo>20171031000000</OrderTimeTo> </Condition> </Search> </Req>"; $url = "https://circus.shopping.yahooapis.jp/ShoppingWebService/V1/orderList"; $ch = curl_init($url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_xml); $xml = curl_exec($ch); curl_close($ch); $data = simplexml_load_string($xml, NULL, LIBXML_NOCDATA); $data = json_decode(json_encode($data), true); var_dump($data); ?>
callback.phpは、2017年10月1日から2017年10月31日までの注文情報(オーダーIDと名前)を取得する処理をしている。
エラーが起こるケース
もしうまくいかない場合は、次のことを確認する。
あとはAPIドキュメントを読めば何とかなるはず。。
ショッピング:注文に関するAPI - Yahoo!デベロッパーネットワーク
お疲れ様でした!