【PHP】スマレジAPIを利用する

まぐろ

PHPスマレジのAPIを利用してデータ取得した時のメモ

スマレジAPI連携画面でAPI設定 & トークンを取得する

  • 左下の「設定」ボタンから「システム連携」→「スマレジAPI設定」へ移動

  • 受信設定」でAPIを利用できるようにする
  1. 受信機能を利用するを「利用する」に変更
  2. アクセストークン発行ボタンを押下してトークンを取得する
    ここの「契約ID」と「アクセストークン」はPHPで使用するのでメモしておく
  • 機能設定で利用したいAPI項目を「利用する」に変更
  • 最後に「更新」ボタンを押下で完了

PHPで利用してみる

  • sumaregi.php
<?php
// ⭐️ スマレジAPIのエンドポイント
$url = 'https://webapi.smaregi.jp/access/';
// ⭐️ 「受信設定」に記載されている契約ID
$contractId = 'XXXXX';
// ⭐️ 「受信設定」に記載されているアクセストークン
$accessToken = 'XXXXXXXXXXXXXXXXXXXXX';

// ⭐️ cURLセッション初期化
$curl = curl_init();

/**
 * ⭐️ 各種設定を行う
 */
// エンドポイント設定
curl_setopt($curl, CURLOPT_URL, $url);
// ヘッダー情報設定
curl_setopt($curl, CURLOPT_HTTPHEADER, [
  'Content-Type: application/x-www-form-urlencoded;charset=UTF-8',
  "X-contract-id: $contractId",
  "X-access-token: $accessToken",
]);
// タイムアウト時間設定
curl_setopt($curl, CURLOPT_TIMEOUT, 30);
// 出力を有効にする
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
// POSTリクエストを有効にする
curl_setopt($curl, CURLOPT_POST, true);
// SSL証明書の検証を無効にする
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

// ⭐️ 送信するデータを指定
// 例えば商品情報を全件取得する場合
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query([
  'proc_name' => 'product_ref',
  'params' => json_encode([
    'table_name' => 'ProductReserveItem',
  ])
]));

// ⭐️ 取得結果を配列にしてダンプしてみる
$response =  curl_exec($curl);
$responseArray = json_decode(trim($response), true);
print_r($responseArray);

// ⭐️ cURLセッション終了
curl_close($curl);

ざっくりまとめ
  • スマレジAPIでは、契約IDアクセストークンをヘッダーに入れて認証を行う
  • curl_setopt()で諸々オプション設定
  • CURLOPT_POSTFIELDSでPOSTしたいデータを指定する
    ここで取得対象のAPI項目や検索項目を指定できる
  • curl_exec()でAPIにPOSTし、受け取ったデータをjson_decodeで配列として取得

CURLOPT_POSTFIELDSの例たち

  • 商品情報取得
// 商品情報を全件取得する場合
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query([
  'proc_name' => 'product_ref',
  'params' => json_encode([
    'table_name' => 'ProductReserveItem',
  ])
]));
// 商品情報を条件取得する場合
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query([
  'proc_name' => 'product_ref',
  'params' => json_encode([
    'table_name' => 'ProductReserveItem',
    'conditions' => [
      ['productId' => 10], // ID指定
    ]
  ])
]));
  • 取引情報取得
// 取引情報を全件取得する場合
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query([
  'proc_name' => 'transaction_ref',
  'params' => json_encode([
    'table_name' => 'TransactionDetail',
  ])
]));
// 取引情報を条件取得する場合
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query([
  'proc_name' => 'transaction_ref',
  'params' => json_encode([
    'table_name' => 'TransactionDetail',
    'conditions' => [
      ['productName like' => "%ハイボール%"] // あいまい検索
    ],
    'order' => [
      'transactionHeadId',
      'transactionDetailId'
    ]
  ])
]));
  • 日次締め情報取得
// 日次締め情報を全件取得する場合
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query([
  'proc_name' => 'daily_sum_ref',
  'params' => json_encode([
    'table_name' => 'DailySum',
  ])
]));
// 日次締め情報を条件取得する場合
// 日付指定
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query([
  'proc_name' => 'daily_sum_ref',
  'params' => json_encode([
    'table_name' => 'DailySum',
    'conditions' => [
      ['sumDate' => '2020-12-21'] // 日付指定
    ]
  ])
]));
// 期間指定
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query([
  'proc_name' => 'daily_sum_ref',
  'params' => json_encode([
    'table_name' => 'DailySum',
    'conditions' => [
      ['sumDate >=' => '2021-02-16'], // 開始日指定
      ['sumDate <=' => '2021-02-17'] // 終了日指定
    ]
  ])
]));