RMS APIは楽天市場の店舗管理、商品管理の自動化を実現するAPIです。あまりサンプルがまとまっていないので、APIの全パターンを下記記事でまとめています。
楽天 RMS APIのPHPサンプル集・使い方 ほぼ全パターン(随時更新中)
今回は楽天ペイ受注API(RakutenPayOrderAPI)、getOrderのサンプルを解説します。
APIを使用できる環境がない場合は、下記から出店申請をしてください。毎度言ってますが料金が高いので、APIを試すだけなら既に店舗アカウントを持っている人に頼んでテスト店舗を使わせてもらうのも手です。
サンプルソースコードは下記です。
[st-mybox title="注意ポイント" fontawesome="fa-exclamation-circle" color="#ef5350" bordercolor="#ef9a9a" bgcolor="#ffebee" borderwidth="2" borderradius="5" titleweight="bold"]
楽天ペイ移行前の注文取得はOrder APIのgetOrderを使う必要があります。ご注意ください。OrderAPIのgetOrderは下記にサンプルがあります。
[/st-mybox]
こちらの記事は当初運営者メンバーの執筆でしたが現在は離れており、寄稿記事となっています。そのため当記事の情報アップデートにつきましては2020年1月をもって終了・サポート・内容についての問合せなどは受けておりません。また、記事内容を利用された際に生じた内容にも責任を負えませんのでご了承ください。
getOrderの概要
getOrderを使えば、店舗に入った注文の注文詳細情報を取得できます。
getOrderはREST APIです。エンドポイントにJSONパラメーターを添えてPOSTすると、指定の条件の注文をJSONで取得できます。
指定できる検索パラメータの例は下記です。
- 注文番号リスト
- バージョン情報
取得できる注文の情報の例は下記です。
- ステータス
- コメント
- 合計金額
- 請求金額
- 決済方法
- 決済方法が共通決済かどうか
種類はかなりあるので、後述するレスポンス例を見てください。
versionに「2」を指定すると、決済方法が共通決済かどうかのフラグrpaySettlementFlagが取れます。
共通決済であればconfirmOrderで注文確認処理を行えば、入金までを楽天が代行してくれます。選択決済の場合、confirmOrderをするとRMSのステータス自体は自動で進んでいきますが、入金の手続きは店舗側でやることになります。
このversionというパラメータは2018/11/21に登場したもので、それ以前は共通決済かどうかはsettlementMethod(支払い方法名)の文字列を見て、システム側で判定するしかありませんでした。versionに2を指定すれば、共通決済かどうかの判定は楽天がやってrpaySettlementFlagで返してくれるため、非常に便利です。
POST リクエスト例
下記のようなリクエストを送ります。
{
'orderNumberList' => [362633-20181007-00000706],
'version' => 2
}
レスポンス例
下記のような感じで返ってきます。
{
"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": []
}
]
}
ソースコード解説
やることは超簡単で下記。
- POSTリクエストする検索条件を入力。JSONにして検索パラメータを作る
- CURLで検索パラメータをぶち込んでPOSTする
POSTリクエストする検索条件を入力。JSONにして検索パラメータを作る
まずはリクエストとして設定する検索条件の変数を設定。
$orderNumber = '123456-20180101-00111801';
if($_GET[num]) {
$orderNumber = $_GET[num];
}
$orderNumberList = array($orderNumber);
CURLで検索パラメータをぶち込んでPOSTする
jsonにした検索パラメータをcurlでPOSTする。
list($httpStatusCode, $response) = getOrder($orderNumberList);
/***
* RakutenPayOrderAPI searchOrder APIを使って、楽天ペイ注文の「注文情報の取得」を行うことができます。
* サンプルレスポンスは下記
* */
function getOrder($orderNumberList) {
$authkey = base64_encode(RMS_SERVICE_SECRET . ':' . RMS_LICENSE_KEY);
$header = array(
'Content-Type: application/json; charset=utf-8',
"Authorization: ESA {$authkey}",
);
$requestJson = json_encode([
'orderNumberList' => $orderNumberList,
'version' => 2
]);
$url = RMS_API_RAKUTEN_PAY_GET_ORDER;
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $requestJson);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //返り値を 文字列で返します
$response = curl_exec($ch);
if(curl_error($ch)){
$response = curl_error($ch);
}
$httpStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$response = json_decode( $response, true );
curl_close($ch);
return array($httpStatusCode, $response);
}
まとめ
getOrderを使って、注文の入った注文番号を取得できます。注文の詳細が取得できます。決済方法が共通決済か否かも2018/11/21以降取得できるようになりました。
試してみたい方は是非下記から資料請求などをして準備をはじめてみてくださいね。