どのような店舗であっても商品があります。商品をあらかじめ登録しておくことでレジ操作が簡単になります。さらに複数店舗であったり、商品情報が頻繁に更新される場合、APIを使って商品入れ替え作業を自動化すると日々のワークフローが楽になることでしょう。
Squareの商品APIを使うことで基幹システム(場合によってはExcelかも知れません)にある商品データをSquareのレジアプリに同期できるようになります。今回は商品の登録と一覧取得、画像アップロードについて紹介します。
注意点
商品APIはバージョン1のみ提供されています(バージョン2ではカタログAPIと名前を変えています)。サンドボックス環境はバージョン2に対してのみ有効になりますので、商品APIはサンドボックスで試用できません。
共通処理について
今回はRubyを使って説明します。Square公式のRubyライブラリ、SquareConnectを使います。 YOUR_ACCESS_TOKEN
は自分のものに置き換えてください。
require 'square_connect'
access_token = 'YOUR_ACCESS_TOKEN'
SquareConnect.configure do |config|
config.access_token = access_token
end
# 商品APIのインスタンス
api_instance = SquareConnect::V1ItemsApi.new
また、必ず店舗情報が必要になります。これはこちらの記事を参考に取得してください(以下ではlocationとします)。
商品を登録する
商品情報は以下のようにオブジェクトを定義します。商品名や説明、価格を設定して登録します。
request_body = {
"name": "ミルクシェーキ",
"description": "疲れた体にぴったりな甘いミルクシェーキです",
"visibility": "PUBLIC",
"variations": [
{
"name": "Small",
"pricing_type": "FIXED_PRICING",
"price_money": {
"currency_code": "JPY",
"amount": 550
},
"sku": ""
}
]
}
begin
resp = api_instance.create_item(location.id, request_body)
rescue SquareConnect::ApiError => e
raise "Error encountered while create item: #{e.message}"
end
商品情報を取得する
商品一覧を取得するのは店舗IDだけで実行できます。
begin
resp = api_instance.list_items(location.id)
rescue SquareConnect::ApiError => e
raise "Error encountered while create item: #{e.message}"
end
実行すると、次のように結果が一覧で返ってきます。決済などではこのデータのidを使って行います。
{
:id=>"29a2bb32-050c-452b-b678-e0018b34e73a",
:name=>"ミルクシェーキ",
:description=>"疲れた体にぴったりな甘いミルクシェーキです",
:type=>"NORMAL",
:visibility=>"PRIVATE",
:available_online=>false,
:variations=>[{
:id=>"9f8729b3-cf72-4eb4-8843-4d9a1389bcc1",
:name=>"Small",
:item_id=>"29a2bb32-050c-452b-b678-e0018b34e73a",
:pricing_type=>"FIXED_PRICING",
:price_money=>{
:amount=>550,
:currency_code=>"JPY"
},
:sku=>"",
:track_inventory=>false,
:inventory_alert_type=>"NONE"
}],
:fees=>[]
}
商品画像をアップロードする
デフォルトでは商品画像はなく、単なる文字が表示されるだけになります。これでは寂しいので商品画像をアップロードします。なお、Square Connectでは商品画像アップロードAPIに対応した機能がありません。そこで net/http
モジュールを使ってアップロードを行います。
require("net/http")
require("uri")
begin
# データの準備
image_file = File.open("/path/to/item/image.png", "rb")
data = [
["image_data", image_file, {
filename: "image.png",
content_type: "image/png"
}]
]
# URLの作成
uri = URI.parse("https://connect.squareup.com/v1/#{location.id}/items/#{item.id}/image")
https = Net::HTTP.new(uri.host, uri.port)
https.use_ssl = true
# リクエストの作成
req = Net::HTTP::Post.new(uri.request_uri)
req['Authorization'] = "Bearer #{access_token}"
req.set_form(data, 'multipart/form-data')
res = Net::HTTP.new(url.host, url.port).start do |http|
https.request(req)
end
ensure
image_file.close
end
puts res.body
このように multipart/form-data
で画像をアップロードすれば良いだけです。そうするとSquareレジアプリの商品画像が差し替わります。
商品APIではこの他、カテゴリや在庫変更などのAPIが用意されています。基幹システムと連携させることで、スムーズなレジ入力ができるようになるはずです。ぜひご利用ください。