LoginSignup
2
1

More than 5 years have passed since last update.

Squareの商品APIを使いこなす

Posted at

どのような店舗であっても商品があります。商品をあらかじめ登録しておくことでレジ操作が簡単になります。さらに複数店舗であったり、商品情報が頻繁に更新される場合、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が用意されています。基幹システムと連携させることで、スムーズなレジ入力ができるようになるはずです。ぜひご利用ください。

Square 商品 API

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1