楽天RMS 受注APIサービスをPHPで利用するサンプルを書いてみた
概要
先月はYahoo!ショッピングのプロフェッショナル出店ストア向けAPIを利用したPHPサンプルを書いてみたのだが、楽天でも同じような機能を作ろうと思ったのが始まり。
楽天RMSのWEB APIサービスを利用するには、管理画面にログイン後、「拡張サービス一覧」から「WEB APIサービス」のリンクをクリックする。ちなみに無料で利用できる。
一応、ドキュメントが用意されているものの、情報が古い上にJavaで開発することが前提になっている。(もしかして楽天APIに需要がないのか?)
PHPのソースコードがないかとネットを探してみるも、「楽天カスタマーサポートからPHPのサンプルをもらってね」と書かれているものが多数…。
仕方ないから自分で開発することにしたのであった。
前提
楽天RMSのドキュメントを読むと、受注API・決済API・在庫APIはSOAP呼び出し、その他APIはREST(POST/GET)呼び出しと書かれている。
今回は受注API(OrderAPI)を利用するので、SOAP呼び出しを使う。
楽天RMS APIを利用するには、まず最初に「申込、利用規約確認」から申込みする。次に「利用設定」から利用APIを選択する。
PHP言語を使って、サーバーサイドアプリケーションを開発する。
サンプルプログラム
ライブラリ等を使わず、必要最低限な機能を一番シンプルなPHPで書くことにする。
サービスシークレットやライセンスキーは適宜、ご自身の文字列に書き換えること。
<?php // ------------------------------------------------ 初期設定 $serviceSecret = "<ここにあなたのサービスシークレット>"; // サービスシークレット(1) $licenseKey = "<ここにあなたのライセンスキー>"; // ライセンスキー(2) $shop_url = "<ここにあなたのストアアカウント>"; // ストアアカウント // ------------------------------------------------ 受注情報を取得 $authkey = "ESA " . base64_encode($serviceSecret . ':' . $licenseKey); $post_xml = "<?xml version='1.0' encoding='UTF-8'?> <SOAP-ENV:Envelope xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/' xmlns:ns1='http://orderapi.rms.rakuten.co.jp/rms/mall/order/api/ws'> <SOAP-ENV:Body> <ns1:getOrder> <arg0> <authKey>{$authkey}</authKey> <shopUrl>{$shop_url}</shopUrl> <userName>?</userName> </arg0> <arg1> <isOrderNumberOnlyFlg>false</isOrderNumberOnlyFlg> <orderSearchModel> <dateType>1</dateType> <startDate>2017-10-26</startDate> <endDate>2017-10-28</endDate> </orderSearchModel> </arg1> </ns1:getOrder> </SOAP-ENV:Body> </SOAP-ENV:Envelope>"; $header = array( "Content-Type: text/xml;charset=UTF-8", ); $url = "https://api.rms.rakuten.co.jp/es/1.0/order/ws"; $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); $clean_xml = str_ireplace(['S:', 'ns2:'], '', $xml); $data = simplexml_load_string($clean_xml); $data = json_decode(json_encode($data), true); ?>
ちなみにストアアカウントとは、あなたの出店ストアのアドレス(https://www.rakuten.co.jp/○○○/)にある、○○○の部分。
上記のサンプルプログラムをUTF-8で保存してアクセスしてみると、楽天RMSから受注情報が取得できる。
※サンプルでは2017-10-26から2017-10-28分が指定されている
おまけ
ついでにREST方式の楽天APIを利用するサンプルも書いておく。
楽天RMSからカテゴリ一覧を取得するAPIの例。当たり前だけど、管理画面で利用APIに指定してないと動かないので注意。
<?php // ------------------------------------------------ 初期設定 $serviceSecret = "<ここにあなたのサービスシークレット>"; // サービスシークレット(1) $licenseKey = "<ここにあなたのライセンスキー>"; // ライセンスキー(2) // ------------------------------------------------ カテゴリ一覧を取得 $authkey = base64_encode($serviceSecret . ':' . $licenseKey); $header = array( "Content-Type: text/xml;charset=UTF-8", "Authorization: ESA {$authkey}", ); $url = "https://api.rms.rakuten.co.jp/es/1.0/categoryapi/shop/categories/get"; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); $xml = curl_exec($ch); curl_close($ch); var_dump($xml); ?>
ドキュメントにも書かれているけど、ライセンスキーには有効期限があるので、定期的にライセンスキーを更新する必要がある。面倒臭い・・。
以上、お疲れ様でした。