スマレジAPI を使ってサンドボックス環境から会員情報を取得・更新してみた

2021.03.29

スマレジとは iPhone/iPad 等の端末から利用できる高機能クラウド POS サービスです。レジ機能、予算管理、顧客管理、スタッフ管理、在庫管理など、幅広い用途で利用することができます。

本記事ではスマレジ Developersを利用してサンドボックス環境の作成から POS 機能と API 連携する一連の流れをまとめました。

本記事の流れ

  • スマレジ Developers アカウントを作成
  • サンプルアプリを登録
  • サンプルデータを作成
  • API からサンドボックス環境のデータを取得・更新

スマレジ Developers アカウントを作成

スマレジ Developersでアカウントを作成します。

サンプルアプリを登録

API を利用するのに必要なクライアント ID とクライアントシークレットを払い出すため、サンプルアプリを登録します。

スコープタブで利用したい API を有効にします。今回は会員情報を取得する API を利用したいので参照・更新を有効化しています。

基本情報は必須マークがついているもののみ入力すれば OK です。環境設定の認可情報のクライアント ID とクライアントシークレットを後に利用します。

サンプルデータを作成

コンソール右上の Bento メニューからサンドボックス環境を開くことができます。

POS を選択し、会員<新規登録 から会員データの登録を行います。データの量が多い場合は CSV でインポートすることも可能ですが、今回は手動で登録を行います。

二件の会員データを以下の内容で登録しました。後ほど会員ポイント一覧を取得する API も利用するため、それぞれポイントも付与しています。

API からデータを取得

Postmanを利用して API からデータを取得します。

アクセストークンの取得

全ての API コールに必要なアクセストークンを取得します。必要な情報は以下です。

項目
契約 ID スマレジDevelopersポータル右上に表示される”契約 ID”
クライアント ID 登録したサンプルアプリの”環境設定”ページの認可情報からで確認できる
クライアントシークレット 登録したサンプルアプリの”環境設定”ページの認可情報からで確認できる

以下の内容でリクエストを送信します。

項目
リクエスト種別 GET
リクエスト URL  https://id.smaregi.dev/app/<契約ID>/token
Authorization Basic Auth を選択し、UserName にクライアント ID、Password にクライアントシークレットを指定します。
Headers   Content-Type にapplication/x-www-form-urlencodedを指定します
Body x-www-form-urlencoded を選択し、grant_type にclient_credentials、scope にアプリの環境変数で指定した API を半角スペース区切りで指定します。今回はpos.customers:read pos.customers:writeを指定しています。

トークンが返るので、クリップボードに保存しておきます。

参考: スマレジ・プラットフォーム API 共通仕様書 アクセストークン

会員登録

先ほど取得したトークンを使ってスマレジ API から新規会員を追加します。

項目
リクエスト種別 POST
リクエスト URL https://api.smaregi.dev/<契約ID>/pos/customers
Authorization Bearer Token を選択し、Token に取得したトークンを指定します

以下の内容で新規会員を作成します。

{
  "customerCode": "003",
  "customerNo": "003",
  "firstName": "一郎",
  "lastName": "佐々木",
  "firstKana": "イチロウ",
  "lastKana": "ササキ",
  "sex": "1",
  "mailReceiveFlag": "1",
  "status": "0",
  "storeId": "2"
}

レスポンス

Status: 200
{
    "customerId": 3,
    "customerCode": "003",
    "customerNo": "003",
    "rank": null,
    "staffRank": null,
    "firstName": "一郎",
    "lastName": "佐々木",
    "firstKana": "イチロウ",
    "lastKana": "ササキ",
    "postCode": null,
    "address": null,
    "phoneNumber": null,
    "faxNumber": null,
    "mobileNumber": null,
    "mailAddress": null,
    "mailAddress2": null,
    "mailAddress3": null,
    "companyName": null,
    "departmentName": null,
    "managerialPosition": null,
    "sex": "1",
    "birthDate": null,
    "pointExpireDate": null,
    "lastComeDateTime": null,
    "entryDate": null,
    "leaveDate": null,
    "pointGivingUnitPrice": null,
    "pointGivingUnit": null,
    "pinCode": null,
    "passportNo": null,
    "nationality": null,
    "alphabetName": null,
    "mailReceiveFlag": "1",
    "note": null,
    "note2": null,
    "favoriteList": null,
    "browsingList": null,
    "status": "0",
    "storeId": "2",
    "insDateTime": "2021-03-29T13:39:41+09:00",
    "updDateTime": "2021-03-29T13:39:41+09:00"
}

会員情報を取得

会員の一覧データを取得してみましょう

項目
リクエスト種別 GET
リクエスト URL https://api.smaregi.dev/<契約ID>/pos/customers
Authorization Bearer Token を選択し、Token に取得したトークンを指定します

レスポンス

[
  {
    "customerId": "1",
    "customerCode": "001",
    "customerNo": "001",
    "rank": null,
    "staffRank": null,
    "firstName": "花子",
    "lastName": "山田",
    "firstKana": "ハナコ",
    "lastKana": "ヤマダ",
    "postCode": null,
    "address": null,
    "phoneNumber": null,
    "faxNumber": null,
    "mobileNumber": null,
    "mailAddress": null,
    "mailAddress2": null,
    "mailAddress3": null,
    "companyName": null,
    "departmentName": null,
    "managerialPosition": null,
    "sex": "2",
    "birthDate": null,
    "pointExpireDate": null,
    "lastComeDateTime": null,
    "entryDate": "2021-03-29",
    "leaveDate": null,
    "pointGivingUnitPrice": "100",
    "pointGivingUnit": "10.00",
    "pinCode": null,
    "passportNo": null,
    "nationality": null,
    "alphabetName": null,
    "mailReceiveFlag": "1",
    "note": null,
    "note2": null,
    "favoriteList": null,
    "browsingList": null,
    "status": "0",
    "storeId": "2",
    "insDateTime": "2021-03-29T10:53:26+09:00",
    "updDateTime": "2021-03-29T11:31:21+09:00"
  },
  {
    "customerId": "2",
    "customerCode": "002",
    "customerNo": "002",
    "rank": null,
    "staffRank": null,
    "firstName": "太郎",
    "lastName": "佐藤",
    "firstKana": "タロウ",
    "lastKana": "サトウ",
    "postCode": null,
    "address": null,
    "phoneNumber": null,
    "faxNumber": null,
    "mobileNumber": null,
    "mailAddress": null,
    "mailAddress2": null,
    "mailAddress3": null,
    "companyName": null,
    "departmentName": null,
    "managerialPosition": null,
    "sex": "1",
    "birthDate": null,
    "pointExpireDate": null,
    "lastComeDateTime": null,
    "entryDate": "2021-03-29",
    "leaveDate": null,
    "pointGivingUnitPrice": null,
    "pointGivingUnit": null,
    "pinCode": null,
    "passportNo": null,
    "nationality": null,
    "alphabetName": null,
    "mailReceiveFlag": "1",
    "note": null,
    "note2": null,
    "favoriteList": null,
    "browsingList": null,
    "status": "0",
    "storeId": "2",
    "insDateTime": "2021-03-29T10:54:02+09:00",
    "updDateTime": "2021-03-29T11:31:34+09:00"
  },
  {
    "customerId": "4",
    "customerCode": "003",
    "customerNo": "003",
    "rank": null,
    "staffRank": null,
    "firstName": "一郎",
    "lastName": "佐々木",
    "firstKana": "イチロウ",
    "lastKana": "ササキ",
    "postCode": null,
    "address": null,
    "phoneNumber": null,
    "faxNumber": null,
    "mobileNumber": null,
    "mailAddress": null,
    "mailAddress2": null,
    "mailAddress3": null,
    "companyName": null,
    "departmentName": null,
    "managerialPosition": null,
    "sex": "1",
    "birthDate": null,
    "pointExpireDate": null,
    "lastComeDateTime": null,
    "entryDate": null,
    "leaveDate": null,
    "pointGivingUnitPrice": null,
    "pointGivingUnit": null,
    "pinCode": null,
    "passportNo": null,
    "nationality": null,
    "alphabetName": null,
    "mailReceiveFlag": "1",
    "note": null,
    "note2": null,
    "favoriteList": null,
    "browsingList": null,
    "status": "0",
    "storeId": "2",
    "insDateTime": "2021-03-29T13:54:52+09:00",
    "updDateTime": "2021-03-29T13:54:52+09:00"
  }
]

会員ポイント一覧取得

項目
リクエスト種別 GET
リクエスト URL https://api.smaregi.dev/<契約ID>/pos/customers/point
Authorization Bearer Token を選択し、Token に取得したトークンを指定します

レスポンス

[
  {
    "customerId": "1",
    "mile": null,
    "point": "1001",
    "pointExpireDate": null,
    "insDateTime": "2021-03-29T10:53:26+09:00",
    "updDateTime": "2021-03-29T11:31:21+09:00"
  },
  {
    "customerId": "2",
    "mile": null,
    "point": "200",
    "pointExpireDate": null,
    "insDateTime": "2021-03-29T10:54:02+09:00",
    "updDateTime": "2021-03-29T11:31:34+09:00"
  },
  {
    "customerId": "4",
    "mile": null,
    "point": null,
    "pointExpireDate": null,
    "insDateTime": "2021-03-29T13:54:52+09:00",
    "updDateTime": "2021-03-29T13:54:52+09:00"
  }
]

あとがき

本記事では スマレジDeveloper アカウント作成、トークンの取得、APIとの疎通までの一連の流れをご紹介しました。今回は会員 API を試しましたが、他にもいろんな API が用意されているので引き続き触ってみようかなと思います。何かの参考になれば幸いです。

参考