難解なことで有名(?)な、楽天 RMS APIのsampleをPHPで書いてみた。ほぼ全てのAPIを網羅している。RMS APIを使えば
- 商品の一括自動登録
- 商品画像を一括アップロード、設定
- 店舗内カテゴリーを動的に生成、商品にセット
- 受注時に自動でオーソリ
- 受注時に受注ステータスを変更
などなど、今まで手作業でRMSで行ってきたほとんどのことを自動化できる。
こちらの記事は当初運営者メンバーの執筆でしたが現在は離れており、寄稿記事となっています。そのため当記事の情報アップデートにつきましては2020年1月をもって終了・サポート・内容についての問合せなどは受けておりません。また、記事内容を利用された際に生じた内容にも責任を負えませんのでご了承ください。
RMS APIを使用するのに必要な事前準備
APIを使用するには出店している店舗、もしくはテスト店舗のAPIのlicense_key、service_secret、authなどが必要になる。下記から、出店の申請を行ってください(テスト店舗を使用する場合も既存の出店アカウントが必要になります)。
決して安くないので、資料請求をして楽天担当と相談しながら進めることをオススメします。
RMS APIサンプルソースコード(PHP)と概要
下記で公開しています。git cloneした上で、「使い方」を見ながら、service_secretやauthなどを設定すればすぐにAPIを使用できます。何も考えずまずはサンプルPHPを開いてみると、リクエストとレスポンスがブラウザに表示されるのでやってることは分かるかと思います。
GitHub - yheihei/rms-api-sample: Sample code about Rakuten RMS API
商品API(ItemAPI)
item.insert 商品新規登録(REST API)
商品APIのitem.insertでは商品を新規登録できる。
できることの例は下記。
- 項目選択肢別在庫設定を使用して、「カラー×サイズ」といった二次元の選択肢を持った在庫設定ができる
- ポイント変倍設定
- 店舗内カテゴリーを設定して商品登録
- 商品の画像をセット(Cabinet APIで予め画像をアップロードした後、URLを指定)
サンプルソースコードは下記。
サンプルの詳細解説記事はこちら
「項目選択肢別在庫」設定時のサンプルは下記。
サンプルの詳細解説記事はこちら(準備中)
item.update 商品更新(REST API)
商品APIのitem.updateでは商品の更新ができる。
商品管理番号(商品URL)を指定することで、item.insertで登録した商品情報を変更できる。
ポイントキャンペーン実施中はポイント倍率を変えれないなど、膨大なパターンの更新条件があってかなり面倒。
レスポンスのitemUpdateResult->errorMessagesにエラー内容が文章で返ってくるので、それを見ながら更新条件を探っていくと良い。(API仕様に書いてない条件もたくさんある)
サンプルソースコードは下記。
サンプルの詳細解説記事はこちら(準備中)
「項目選択肢別在庫」設定時のサンプルは下記。
在庫数は項目選択肢別在庫全てについて指定する必要がある。
例えばカラーが「赤/白」、サイズが「S/M」の商品があって、「赤のS」の在庫数だけ変えたいと思ったら、全パターンの情報を「itemInventory」要素に格納する必要がある。(でないと、赤のS以外の在庫がないものとして上書きされ消えます)
あるパターンの在庫を一つだけ変更したい場合は後述の在庫API(Inventory API)を使うと便利。
サンプルの詳細解説記事はこちら(準備中)
item.get 商品取得 (REST API)
商品APIのitem.getでは商品の更新ができる。
商品管理番号(商品URL)を指定することで、item.insertで登録した商品情報を取得できる。
サンプルソースコードは下記。
サンプルの詳細解説記事はこちら(準備中)
R-Cabinet API(Cabinet API)
Cabinet APIは画像を店舗のR-Cabinet APIにアップロードするAPI。
使用例としては、
- 商品画像をあらかじめCabinet APIのcabinet.file.insert APIでアップロードし、アップロードしたファイルIDを取得
- ファイルIDからcabinet.files.search APIを用いて実URLを取得して、商品登録時の画像URLをinsert.item、update.item APIで指定
- 商品ページに商品画像が表示される
などの使い方が想定される。
cabinet.usage.get R-Cabinetの状態取得 (REST API)
cabinet.usage.get APIを使って、R-Cabinetの残容量などを確認できる。
R-Cabinetは店舗のプランによって、下記の要素が異なる。
- アップロード可能バイト数
- 作成可能総フォルダ数
- 作成可能フォルダ内画像数
プランによっては(メガショッププランなど)こちらが無限になるが、それ以外のプランでは上記が設定されている。
そのため、ファイルアップロード前に、アップロードできるかどうかの確認を本APIで行う。
サンプルソースコードは下記。
サンプルの詳細解説記事はこちら(準備中)
cabinet.folders.get API R-Cabinetフォルダ一覧取得 (REST API)
cabinet.folders.get APIを使って、R-Cabinet上にあるフォルダの一覧を取得できる。
取得できる情報は例えば下記。
- フォルダID
- フォルダのルートからのパス
- フォルダの名前
- ファイルサイズ
状況によって動的に画像保存するフォルダを変更したい場合は、本APIを用いてフォルダの情報を取得することになる。
サンプルソースコードは下記。
サンプルの詳細解説記事はこちら(準備中)
cabinet.files.search API R-Cabinet内の画像検索(REST API)
cabinet.files.search APIを用いて、画像を検索する。
取れるパラメータは例えば下記。
- ファイルID
- 画像名
システム側でファイルIDなどを保存しておいて、好きな時に本APIを呼ぶと、画像URLだの上位フォルダの情報だのが取れる。
商品画像の登録/更新時に画像を変更したりするときによく使う。
サンプルソースコードは下記。
サンプルの詳細解説記事はこちら(準備中)
cabinet.file.delete API R-Cabinet内の画像削除(REST API)
cabinet.file.delete APIを用いて、画像を削除する。
ファイルID指定で削除する。
R-Cabinet 側のファイル数や容量がパンパンになった時に、いらなくなった画像をID指定で一括削除するなどの用途がある。
サンプルでは1画像削除しかしていないが、ファイルIDを複数指定することで複数画像の削除もできる。
サンプルソースコードは下記。
サンプルの詳細解説記事はこちら(準備中)
cabinet.file.insert API R-Cabinet内に画像アップロード(REST API)
cabinet.file.insert APIを用いて、画像をアップロードする。
下記を指定してmultipartでPOSTを行う。
- 画像バイナリ
- アップ先のフォルダのフォルダID
- ファイル名等の基本情報
Maxのファイルサイズは2Mbyteで、解像度も1600×1200までという制限がある。
商品登録前に、本APIで画像をアップロードしておき、アップした画像のURLを商品APIコール時に指定することで、商品画像として使用できる。
サンプルソースコードは下記。
サンプルの詳細解説記事はこちら
RMS R-CabinetAPI(CabinetAPI)cabinet.file.insertで画像登録するPHPサンプル解説・使い方
cabinet.file.update API R-Cabinet内の画像更新(REST API)
cabinet.file.update APIを用いて、画像をアップロードする。
下記を指定してmultipartでPOSTを行う。
- 画像バイナリ
- 更新したいファイルのファイルID
- ファイル名等の基本情報
更新したいファイルのファイルIDを指定することになるので、作るシステムやツール内で、商品毎の画像ファイルIDを保存しておくと更新がスムーズ。
サンプルソースコードは下記。
サンプルの詳細解説記事はこちら(準備中)
cabinet.folder.insert API R-Cabinet内のフォルダ作成(REST API)
cabinet.folder.insert APIを用いて、R-Cabinet内の任意の場所にフォルダを作成する。
指定できるパラメータは下記。
- フォルダの名前
- 上位フォルダのフォルダID
上位フォルダのフォルダIDを指定せずにPOSTすると、R-Cabinetのルート配下にフォルダを作成する。
上位フォルダを指定することで、任意の場所にフォルダ作成ができるが、基本フォルダ(フォルダID:0)配下には作成できないので注意。
サンプルソースコードは下記。
サンプルの詳細解説記事はこちら(準備中)
カテゴリーAPI (Category API)
カテゴリーAPIは店舗内のカテゴリーを登録、取得するAPIである。使用例としては下記。
- 商品登録前にカテゴリーAPIにて任意のカテゴリーをshop.category.insertを用いて登録
- 商品登録前に任意のカテゴリーをshop.categories.getを用いて取得、商品にカテゴリーを設定する
shop.categories.get API カテゴリー取得(REST API)
shop.categories.get APIを用いて、店舗に登録されているカテゴリーを取得する
取得できるものは下記
- カテゴリーID
- カテゴリーの階層レベル
- カテゴリーの名前 等
商品登録時にカテゴリーをセットする際は、カテゴリーIDを使うことになる。
予めカテゴリー一覧をシステム側で取得しておき、商品登録時にカテゴリーを選ばせたり自動で選択するような仕組みが想定される。
サンプルソースコードは下記。
サンプルの詳細解説記事はこちら(準備中)
shop.category.insert API カテゴリー新規追加(REST API)
shop.category.insert APIを用いて、店舗に登録されているカテゴリーを追加する
指定できるものは下記
- どのカテゴリー配下に追加するか(カテゴリーID)
- カテゴリーの名前
メガショッププランかつ、カテゴリセットを登録済みの場合は、カテゴリセット番号を合わせて指定する必要があります。本サンプルではサポートしていませんのでAPI仕様書をご確認ください。
サンプルソースコードは下記。
サンプルの詳細解説記事はこちら(準備中)
shop.category.update API カテゴリー更新(REST API)
shop.category.update APIを用いて、店舗に登録されているカテゴリーを更新する
指定できるものは下記
- カテゴリーID
- カテゴリーの名前
サンプルソースコードは下記。
サンプルの詳細解説記事はこちら(準備中)
shop.category.delete API カテゴリー削除(REST API)
shop.category.delete APIを用いて、店舗に登録されているカテゴリーを削除する
指定できるものは下記
- 削除したいカテゴリーID
サンプルソースコードは下記。
サンプルの詳細解説記事はこちら(準備中)
受注API (Order API)
受注APIは商品の注文情報を取得したり更新したりするAPIである。できることは主に下記。
- 注文の商品データを取得。クレジットカードや楽天バンク決済などの支払い方法の種類の取得や、決済ステータスの取得、配送方法情報などを取得できる
- 注文を受けて、情報を精査。例えば入金済みになっていれば受注のステータスを「発送後入金待ち」に変更するなど、受注ステータスを変更できる
- 受注のキャンセル
getOrder API 注文取得(SOAP API)
getOrder APIを用いて、注文データを取得。
取得できるものは下記
- 注文された商品の商品データ、注文番号
- 支払い方法や入金ステータス
- 配送方法や購入者住所などの配送情報データ
支払方法名(settlementName)については、店舗設定>4.基本情報設定>の「決済方法」に記載のある名称がレスポンスされます。ただし決済ステータスについては、クレジット決済と楽天バンク決済しか取得できないため注意。例えば、楽天マルチ決済で決済された場合、支払い方法は本APIで取得できますが、決済ステータスについては取得できません。
サンプルソースコードは下記。
サンプルの詳細解説記事はこちら
changeStatus API 受注ステータス更新(SOAP API)
changeStatus APIを用いて、受注ステータスを変更できます。
変更できるステータスは店舗設定によりますがデフォルトでは下記。文字列指定なのでいかようにもできます。
- 新規受付
- 発送前入金待ち
- 発送待ち
- 発送後入金待ち
- 処理済
- 保留
※または、店舗様設定独自ステータス
getOrderで注文を取得し入金ステータスを確認した上で、本APIで受注ステータスを変更するなどの処理が想定されます。
本APIは非同期なので、要求が正しく実行されたかどうかは、要求時に生成したリクエストIDをもとにgetResult APIを叩く必要があります。
サンプルソースコードは下記。
サンプルの詳細解説記事はこちら(準備中)
updateOrder API 注文情報更新(SOAP API)
updateOrder APIを用いて、注文情報を変更できます。
変更の情報内には、色々な条件分岐があり、一部情報を変更するのに色々な情報を付与する必要があるので多少面倒です。詳しくはgithubのREADME.mdを見ていただければ。
サンプルソースコードは下記。
サンプルの詳細解説記事はこちら(準備中)
cancelOrder API 注文キャンセル(SOAP API)
cancelOrder APIを用いて、注文をキャンセルできます。
受注番号と、キャンセル理由(顧客理由、店舗理由)を入力してPOSTするとキャンセルできます。
同じく非同期APIなので後述のgetResult APIを用いて、要求結果を取得する必要があります。例えばキャンセルを実施したけれども何らかの理由でキャンセルできなかった場合の処理などが想定されます。
サンプルソースコードは下記。
サンプルの詳細解説記事はこちら(準備中)
getResult API 非同期API結果取得(SOAP API)
getResult APIを用いて、Order API全般の非同期APIの結果取得ができます。
非同期APIを叩く際に使用したリクエストIDをキーに要求結果が取得できます。
サンプルソースコードは下記。
サンプルの詳細解説記事はこちら(準備中)
楽天ペイ受注API(RakutenPayOrderAPI)
楽天ペイ受注APIは商品の注文情報を取得したり、更新したりするAPIである。前述の受注API(Order API)と決済APIでも同様のことができるが、2018年後半から、楽天ペイ受注APIでしか注文情報を扱えなくなる。
従来の受注API(Order API)のめんどくさい点が大幅に改善されている。主な使い方は下記。決済方法がかなりシンプルになっている。
- 決済操作がシンプルに。注文確認のconfirmOrderを叩けば、決済方法を意識することなく、楽天側が決済を代行してくれる。
- 受注情報 getOrderを叩いて、ステータス(orderProgress)が「300: 発送待ち」になれば決済が完了している。システム側はこのステータス(orderProgress)の状態だけを見て、発送のタイミングで、発送完了報告 updateOrderShippingを叩くだけで、処理を完了まで持っていける
また、従来のXMLのリクエスト/レスポンスから、JSONリクエスト/レスポンスに変わっている。個人的な感覚だが、JSONになったことでプログラムは書きやすくなった。
searchOrder API 楽天ペイ受注API(RakutenPayOrderAPI)
searchOrder APIを用いて、楽天ペイ対応店舗の注文番号を取得できる。旧受注API(Order API)時の注文は取得できないので注意。
指定できる検索パラメータ例は下記。
- 検索期間
- ステータス
- サブステータスID
- 支払い方法名 等 様々なパラメータ
サンプルレスポンス
{ "orderNumberList": [ "362633-20180924-00001714", "362633-20180921-00000729", "362633-20180921-00001720", "362633-20180921-00000701", "362633-20180921-00001719", "362633-20180921-00000723" ], "MessageModelList": [ { "messageType": "INFO", "messageCode": "ORDER_EXT_API_SEARCH_ORDER_INFO_101", "message": "注文検索に成功しました。" } ], "PaginationResponseModel": { "totalRecordsAmount": 6, "totalPages": 1, "requestPage": 1 } }
サンプルソースコードは下記。
サンプルの詳細解説記事はこちら
RMS 楽天ペイ受注API(RakutenPayOrderAPI) searchOrderで注文番号を取得するPHPサンプル解説・使い方
getOrder API 楽天ペイ受注API(RakutenPayOrderAPI)
getOrder APIを用いて、楽天ペイ対応店舗の注文情報を取得できる。旧受注API(Order API)時の注文は取得できないので注意。
指定できる検索パラメータ例は下記。
- 注文番号リスト
- バージョン
2018/11/21以降、共通決済かどうかのフラグも取得できるようになったのでかなり便利。
サンプルレスポンス
{ "MessageModelList": [ { "messageType": "INFO", "messageCode": "ORDER_EXT_API_GET_ORDER_INFO_101", "message": "受注情報取得に成功しました。(取得件数2件)" } ], "OrderModelList": [ { "orderNumber": "123456-20180101-00111801", "orderProgress": 300, "subStatusId": null, "subStatusName": null, "orderDatetime": "2018-01-16T10:43:52+0900", "shopOrderCfmDatetime": "2018-01-20T08:22:07+0900", "orderFixDatetime": "2018-01-20T08:24:06+0900", "shippingInstDatetime": "2018-01-20T08:24:06+0900", "shippingCmplRptDatetime": null, "cancelDueDate": "2019-01-16", "deliveryDate": null, "shippingTerm": null, "remarks": "[配送日時指定:]\n2018年01月23日\n\n[備考欄です:]\nなにかあればどうぞ", "giftCheckFlag": 0, "severalSenderFlag": 0, "equalSenderFlag": 1, "isolatedIslandFlag": 0, "rakutenMemberFlag": 1, "carrierCode": 0, "emailCarrierCode": 0, "orderType": 1, "reserveNumber": null, "reserveDeliveryCount": null, "cautionDisplayType": 0, "rakutenConfirmFlag": 0, "goodsPrice": 1000, "goodsTax": 80, "postagePrice": 1000, "deliveryPrice": 300, "paymentCharge": 0, "totalPrice": 2080, "requestPrice": 2380, "couponAllTotalPrice": 0, "couponShopPrice": 0, "couponOtherPrice": 0, "additionalFeeOccurAmountToUser": 0, "additionalFeeOccurAmountToShop": 0, "asurakuFlag": 0, "drugFlag": 0, "dealFlag": 0, "membershipType": 0, "memo": null, "operator": null, "mailPlugSentence": null, "modifyFlag": 0, "isTaxRecalc": 1, "OrdererModel": { "zipCode1": "158", "zipCode2": "0094", "prefecture": "東京都", "city": "世田谷区", "subAddress": "玉川1丁目14−1 楽天クリムゾンハウス", "familyName": "楽天", "firstName": "太郎", "familyNameKana": "ラクテン", "firstNameKana": "タロウ", "phoneNumber1": "09", "phoneNumber2": "1234", "phoneNumber3": "56780", "emailAddress": "7d034dad8721f6d5ffc1cd9f53d95a77s9@pc.fw.rakuten.ne.jp", "sex": "男", "birthYear": 2000, "birthMonth": 1, "birthDay": 1 }, "SettlementModel": { "settlementMethod": "代金引換", "rpaySettlementFlag": 0, "cardName": null, "cardNumber": null, "cardOwner": null, "cardYm": null, "cardPayType": null, "cardInstallmentDesc": null }, "DeliveryModel": { "deliveryName": "宅配便", "deliveryClass": null }, "PointModel": { "usedPoint": 0 }, "WrappingModel1": null, "WrappingModel2": null, "PackageModelList": [ { "basketId": 10741871, "postagePrice": 1000, "deliveryPrice": 300, "goodsTax": 80, "goodsPrice": 1000, "totalPrice": 2080, "noshi": null, "packageDeleteFlag": 0, "SenderModel": { "zipCode1": "158", "zipCode2": "0094", "prefecture": "東京都", "city": "世田谷区", "subAddress": "玉川1丁目14−1 楽天クリムゾンハウス", "familyName": "楽天", "firstName": "太郎", "familyNameKana": "ラクテン", "firstNameKana": "タロウ", "phoneNumber1": "09", "phoneNumber2": "1234", "phoneNumber3": "56780", "isolatedIslandFlag": 0 }, "ItemModelList": [ { "itemDetailId":10741871, "itemName": "normal_item_stg_01", "itemId": 10000000, "itemNumber": null, "manageNumber": "normal_item_stg_01", "price": 1000, "units": 1, "includePostageFlag": 0, "includeTaxFlag": 0, "includeCashOnDeliveryPostageFlag": 0, "selectedChoice": null, "pointRate": 1, "pointType": 0, "inventoryType": 1, "delvdateInfo": "2〜5日以内にお届け (テスト)", "restoreInventoryFlag": 0, "dealFlag": 0, "drugFlag": 0, "deleteItemFlag": 0 } ], "ShippingModelList": [], "DeliveryCvsModel": null } ], "CouponModelList": [], "ChangeReasonModelList": [] }, { "orderNumber": "123456-20180101-00113801", "orderProgress": 100, "subStatusId": null, "subStatusName": null, "orderDatetime": "2018-01-16T11:43:25+0900", "shopOrderCfmDatetime": null, "orderFixDatetime": null, "shippingInstDatetime": null, "shippingCmplRptDatetime": null, "cancelDueDate": "2018-01-30", "deliveryDate": null, "shippingTerm": 0, "remarks": "[配送日時指定:]\n2018年01月23日\n\n[備考欄です:]\nなにかあればどうぞ", "giftCheckFlag": 0, "severalSenderFlag": 0, "equalSenderFlag": 0, "isolatedIslandFlag": 0, "rakutenMemberFlag": 1, "carrierCode": 0, "emailCarrierCode": 0, "orderType": 1, "reserveNumber": null, "reserveDeliveryCount": null, "cautionDisplayType": 0, "rakutenConfirmFlag": 0, "goodsPrice": 2000, "goodsTax": 0, "postagePrice": 1000, "deliveryPrice": 0, "paymentCharge": 0, "totalPrice": 3000, "requestPrice": 2700, "couponAllTotalPrice": 300, "couponShopPrice": 300, "couponOtherPrice": 0, "additionalFeeOccurAmountToUser": 0, "additionalFeeOccurAmountToShop": 0, "asurakuFlag": 0, "drugFlag": 0, "dealFlag": 0, "membershipType": 0, "memo": "メモ", "operator": null, "mailPlugSentence": "xiao", "modifyFlag": 0, "isTaxRecalc": 1, "OrdererModel": { "zipCode1": "158", "zipCode2": "0094", "prefecture": "東京都", "city": "世田谷区", "subAddress": "玉川1丁目14−1 楽天クリムゾンハウス", "familyName": "楽天", "firstName": "太郎", "familyNameKana": "ラクテン", "firstNameKana": "タロウ", "phoneNumber1": "09", "phoneNumber2": "1234", "phoneNumber3": "56780", "emailAddress": "7d034dad8721f6d5ffc1cd9f53d95a77s9@pc.fw.rakuten.ne.jp", "sex": "男", "birthYear": 2000, "birthMonth": 1, "birthDay": 1 }, "SettlementModel": { "settlementMethod": "銀行振込", "rpaySettlementFlag": 1, "cardName": null, "cardNumber": null, "cardOwner": null, "cardYm": null, "cardPayType": null, "cardInstallmentDesc": null }, "DeliveryModel": { "deliveryName": "その他配送方法1", "deliveryClass": 3 }, "PointModel": { "usedPoint": 0 }, "WrappingModel1": null, "WrappingModel2": null, "PackageModelList": [ { "basketId": 10741920, "postagePrice": 1000, "deliveryPrice": 0, "goodsTax": 0, "goodsPrice": 2000, "totalPrice": 3000, "noshi": null, "packageDeleteFlag": 0, "SenderModel": { "zipCode1": "158", "zipCode2": "0094", "prefecture": "東京都", "city": "世田谷区", "subAddress": "玉川1丁目14−1 楽天クリムゾンハウス", "familyName": "楽天", "firstName": "太郎", "familyNameKana": "ラクテン", "firstNameKana": "タロウ", "phoneNumber1": "09", "phoneNumber2": "1234", "phoneNumber3": "56780" "isolatedIslandFlag": 0 }, "ItemModelList": [ { "itemDetailId":10741920, "itemName": "SMS-Demo_item1", "itemId": 10000036, "itemNumber": null, "manageNumber": "10000036", "price": 2000, "units": 1, "includePostageFlag": 0, "includeTaxFlag": 1, "includeCashOnDeliveryPostageFlag": 0, "selectedChoice": null, "pointRate": 1, "pointType": 0, "inventoryType": 1, "delvdateInfo": null, "restoreInventoryFlag": 0, "dealFlag": 0, "drugFlag": 0, "deleteItemFlag": 0 } ], "ShippingModelList": [ { "shippingDetailId": 14401, "shippingNumber": "後で入れる", "deliveryCompany": "1005", "deliveryCompanyName": "西武運輸", "shippingDate": null } ], "DeliveryCvsModel": null } ], "CouponModelList": [ { "couponCode": "F9CA-SXRE-GPGL-ZGTO", "itemId": 0, "couponName": "idetest2", "couponSummary": "定額割引 300円", "couponCapital": "ショップ", "expiryDate": "2018-03-15", "couponPrice": 300, "couponUnit": 1, "couponTotalPrice": 300 } ], "ChangeReasonModelList": [] } ] }
サンプルソースコードは下記。
サンプルの詳細解説記事はこちら
RMS 楽天ペイ受注API(RakutenPayOrderAPI) getOrderで注文情報を取得するPHPサンプル解説・使い方
在庫API (Inventory API)
在庫APIは商品の商品の在庫情報を取得したり更新したりするAPIである。
updateInventoryExternal API 在庫更新(SOAP API)
updateInventoryExternal APIを用いて、登録されている商品の在庫情報を変更できる。
Item APIでもできるが、決定的な違いは項目選択肢別在庫設定の場合である。項目選択肢別在庫設定の場合Item APIだと全バリエーションのパターンの在庫を入力してPOSTする必要があるが、本APIだと部分的に更新できる。
例えば、下記の項目選択肢別在庫設定がある商品に対し、
サイズ/色
S/赤 在庫2
S/白 在庫1
M/赤 在庫2
M/白 在庫3
S/赤のみ在庫を0にしたい場合、Item APIだと全パターンの在庫を指定してPOSTしなければならないが、本APIだと「S/赤」の在庫を0にするというように、ピンポイントで在庫を変更できる。
サンプルソースコードは下記。
サンプルの詳細解説記事はこちら
RMS 在庫API(Inventory API)updateInventoryExternalで在庫更新するPHPサンプル解説・使い方
getInventoryExternal API 在庫取得(SOAP API)
getInventoryExternal APIを用いて、登録されている商品の在庫情報を取得できる。
取得したい商品URLを指定して使用する。
サンプルソースコードは下記。
サンプルの詳細解説記事はこちら(準備中)
決済API
決済APIは注文番号に対して、クレジットカードのオーソリ処理や、売上請求処理が行えるAPIである。
authori API オーソリ処理(SOAP API)
authori APIを用いて、支払い方法がクレジットカード決済になっている注文番号を指定して、オーソリ処理を行う。
非同期APIのため処理結果は後述のgetRCCSResult APIで取得する必要がある。
カードステータスが更新されたかどうかはgetOrder APIのcardStatusの要素でも確認できる。
サンプルソースコードは下記。
サンプルの詳細解説記事はこちら
authoriCancel API オーソリキャンセル処理(SOAP API)
authoriCancel APIを用いて、オーソリ済みになっている受注のオーソリキャンセルを行う。
同じく非同期APIのため処理結果はgetRCCSResult APIで取得する必要あり。
オーソリキャンセルできない状態になっている場合があるため、getRCCSResultで処理結果を確認するロジックを入れる方が安心である。
サンプルソースコードは下記。
サンプルの詳細解説記事はこちら(準備中)
sales API 売上請求処理(SOAP API)
sales APIを用いて、オーソリ済みの受注に対して売上請求を行う。
同じく非同期APIのため処理結果はgetRCCSResult APIで取得する必要あり。
サンプルソースコードは下記。
サンプルの詳細解説記事はこちら(準備中)
salesCancel API 売上請求キャンセル処理(SOAP API)
salesCancel APIを用いて、売上請求済みになっている受注に対して売上請求の取り消しを行う。
同じく非同期APIのため処理結果はgetRCCSResult APIで取得する必要あり。
キャンセルできない状態になっている場合があるため、getRCCSResultで処理結果を確認するロジックを入れる方が安心である。
サンプルソースコードは下記。
サンプルの詳細解説記事はこちら(準備中)
getRCCSResult API 決済API非同期結果取得(SOAP API)
getRCCSResult APIを用いて、決済API全般の非同期要求の結果を取得することができる。
非同期要求を行なった際のリクエストIDをキーに要求結果を取得する。
オーソリやオーソリキャンセルを行なった後、その要求が正常に実行されたかどうかを確認したりするのに使う。
サンプルソースコードは下記。
サンプルの詳細解説記事はこちら(準備中)
RMS APIまとめ
RMS APIは巷に情報がまとまっていなかったり、API仕様書がやや不親切で分かりにくい場合があります。提供されているクライアントもJavaしかなかったり、そもそもサンプルがない場合もありました。
ただ、楽天担当の方は結構突っ込んだ質問をしてもきちんと答えていただけるので、かなり親切な印象です。
その辺のAPI仕様書にはまとまっていない分かりにくい仕様的なものを本記事と関連記事でまとめていきたいと思います。
皆さんの開発が少しでも早くなるようにと思いサンプル作成をさせていただきましたが、何か間違いがあればご指摘いただければと思います。