Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

@goofmint

Squareの在庫を外部システムと連携させる

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(マニュアル調整)が用意されています。


このような操作で在庫数を調整できます。システム連携される際の参考にしてください。

Square Connect API Documentation

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
0
Help us understand the problem. What are the problem?