Squareは元々カフェや美容院、雑貨屋などの小さな店舗で使えるレジを提供していたこともあり、リアル店舗とEコマースを連動させるオムニチャンネルが得意分野となっています。つまり店舗とWebサイトで在庫を調整し合わなければなりません。
それを可能にするのがWeb APIになります。今回はRubyを使ってSquareの在庫データを調整する方法を紹介します。
初期設定
利用するのはSquare Connectになります。RubyであればRubygemsでインストールできます。
$ gem install square_connect
そして初期化します。YOUR_ACCESS_TOKENは自分のものに読み替えてください。
require 'square_connect'
access_token = 'YOUR_ACCESS_TOKEN'
SquareConnect.configure do |config|
config.access_token = access_token
end
在庫データの表示
まず在庫データを表示する方法です。これはv1のAPIを使う必要があります。店舗ID、商品IDがそれぞれ分かっていることとします。
location_id = 'YOUR_LOCATION_ID'
api = SquareConnect::V1ItemsApi.new
# 商品情報
item_response = api.retrieve_item(location_id, 'YOUR_ITEM_ID')
# 在庫情報
inventory_response = api.list_inventory(location_id)
# 引き合わせ
inventory_response.each {|i|
item_response.variations.each {|v|
next if v.id != i.variation_id
puts "#{v.name} => #{i.quantity_on_hand}"
}
}
このようなスクリプトで以下のような結果が返ってきます。それぞれのバリエーションに対する在庫数です。
バリエーション名 => 20.0
黒 => 20.0
白 => 20.0
在庫を調整する
そしてこの内の一つのバリエーションIDを指定して在庫調整を実行します。売れた場合はマイナスの数字で指定する(在庫を減らすという意味で)のがコツです。
response = api.adjust_inventory(location_id, 'YOUR_VALIATION_ID', {
quantity_delta: -2,
adjustment_type: 'SALE',
memo: '他のシステムで販売'
})
この結果のレスポンスは次のようになります。quantity_on_handは新しい在庫数です。
{
:variation_id=>"YOUR_VALIATION_ID",
:quantity_on_hand=>18.0
}
あらかじめ外部システムにおける商品ID(またはSKUのID)とバリエーションIDを紐付けておかないといけないので注意してください。adjustment_typeはSALE(売れた場合)の他、RECEIVE_STOCK(在庫追加)、MANUAL_ADJUST(マニュアル調整)が用意されています。
このような操作で在庫数を調整できます。システム連携される際の参考にしてください。