=begin #カラーミーショップ API ## カラーミーショップ API [カラーミーショップ](https://shop-pro.jp) APIでは、受注の検索や商品情報の更新を行うことができます。 ## 利用手順 はじめに、カラーミーデベロッパーアカウントを用意します。[デベロッパー登録ページ](https://api.shop-pro.jp/developers/sign_up)から登録してください。 次に、[登録ページ](https://api.shop-pro.jp/oauth/applications/new)からアプリケーション登録を行ってください。 スマートフォンのWebViewを利用する場合は、リダイレクトURLに`urn:ietf:wg:oauth:2.0:oob`を入力してください。 その後、カラーミーショップアカウントの認証ページを開きます。認証ページのURLは、`https://api.shop-pro.jp/oauth/authorize`に必要なパラメータをつけたものです。 |パラメータ名|値| |---|---| |`client_id`|アプリケーション詳細画面で確認できるクライアントID| |`response_type`|\"code\"という文字列| |`scope`| 別表参照| |`redirect_url`|アプリケーション登録時に入力したリダイレクトURL| `scope`は、以下のうち、アプリケーションが利用したい機能をスペース区切りで指定してください。 |スコープ|機能| |---|---| |`read_products`|商品データの参照| |`write_products`|在庫データの更新| |`read_sales`|受注・顧客データの参照| |`write_sales`|受注データの更新| 以下のようなURLとなります。 ``` https://api.shop-pro.jp/oauth/authorize?client_id=CLIENT_ID&redirect_uri=REDIRECT_URL&response_type=code&scope=read_products%20write_products ``` 初めてこのページを訪れる場合は、カラーミーショップアカウントのIDとパスワードの入力を求められます。 承認ボタンを押すと、このアプリケーションがショップのデータにアクセスすることが許可され、リダイレクトURLへリダイレクトされます。 承認された場合は、`code`というクエリパラメータに認可コードが付与されます。承認がキャンセルされた、またはエラーが起きた場合は、 `error`パラメータにエラーの内容を表す文字列が与えられます。 アプリケーション登録時のリダイレクトURLに`urn:ietf:wg:oauth:2.0:oob`を指定した場合は、以下のようなURLにリダイレクトされます。 末尾のパスが認可コードになっています。 ``` https://api.shop-pro.jp/oauth/authorize/AUTH_CODE ``` 認可コードの有効期限は発行から10分間です。 最後に、認可コードとアクセストークンを交換します。以下のパラメータを付けて、`https://api.shop-pro.jp/oauth/token`へリクエストを送ります。 |パラメータ名|値| |---|---| |`client_id`|アプリケーション詳細画面に表示されているクライアントID| |`client_secret`|アプリケーション詳細画面に表示されているクライアントシークレット| |`code`|取得した認可コード| |`grant_type`|\"authorization_code\"という文字列| |`redirect_uri`|アプリケーション登録時に入力したリダイレクトURL| ```console # curl での例 $ curl -X POST \\ -d'client_id=CLIENT_ID' \\ -d'client_secret=CLIENT_SECRET' \\ -d'code=CODE' \\ -d'grant_type=authorization_code' \\ -d'redirect_uri=REDIRECT_URI' \\ 'https://api.shop-pro.jp/oauth/token' ``` リクエストが成功すると、以下のようなJSONが返ってきます。 ```json { \"access_token\": \"d461ab8XXXXXXXXXXXXXXXXXXXXXXXXX\", \"token_type\": \"bearer\", \"scope\": \"read_products write_products\" } ``` アクセストークンに有効期限はありませんが、許可済みアプリケーション一覧画面から失効させることができます。なお、同じ認可コードをアクセストークンに交換できるのは1度だけです。 取得したアクセストークンは、Authorizationヘッダに入れて使用します。以下にショップ情報を取得する際の例を示します。 ```console # curlの例 $ curl -H 'Authorization: Bearer d461ab8XXXXXXXXXXXXXXXXXXXXXXXXX' https://api.shop-pro.jp/v1/shop.json ``` ## エラー カラーミーショップAPI v1では - エラーコード - エラーメッセージ - ステータスコード の配列でエラーを表現します。以下に例を示します。 ```json { \"errors\": [ { \"code\": 404100, \"message\": \"レコードが見つかりませんでした。\", \"status\": 404 } ] } ``` OpenAPI spec version: 1.0.0 Generated by: https://openapi-generator.tech OpenAPI Generator version: 3.0.1-SNAPSHOT =end require 'date' module ColorMeShop class Delivery # 配送方法ID attr_accessor :id # ショップアカウントID attr_accessor :account_id # 配送方法名 attr_accessor :name # 配送方法画像URL attr_accessor :image_url # 配送料が無料になる基準 - `not_free`: 有料 - `free`: 無料 - `free_to_limit`: 注文金額が一定以上の場合は無料 attr_accessor :charge_free_type # 配送料が無料になる金額。`charge_free_type`が`free_to_limit`の場合のみ意味を持つ attr_accessor :charge_free_limit # 配送料の計算方法 - `fixed`: 固定額 - `by_price`: 注文金額によって決定 - `by_area`: 配送先都道府県によって決定 - `by_weight`: 商品重量によって決定 attr_accessor :charge_type # 配送料設定の詳細。上記の`charge_free_type`や`charge_type`に基づいて、この中から配送料が決定される attr_accessor :charge # 送料が税込み料金であるか否か attr_accessor :tax_included # 配送伝票番号設定を使用するか否か attr_accessor :slip_number_use # 配送伝票番号確認URL attr_accessor :slip_number_url # 配送方法の説明 attr_accessor :memo # フィーチャーフォン向けショップ用の配送方法説明 attr_accessor :memo2 # 表示順 attr_accessor :sort # 表示状態 attr_accessor :display_state # 配送希望日を指定可能か attr_accessor :preferred_date_use # 配送時間帯を指定可能か attr_accessor :preferred_period_use # 配送方法作成日時 attr_accessor :make_date # 配送方法更新日時 attr_accessor :update_date class EnumAttributeValidator attr_reader :datatype attr_reader :allowable_values def initialize(datatype, allowable_values) @allowable_values = allowable_values.map do |value| case datatype.to_s when /Integer/i value.to_i when /Float/i value.to_f else value end end end def valid?(value) !value || allowable_values.include?(value) end end # Attribute mapping from ruby-style variable name to JSON key. def self.attribute_map { :'id' => :'id', :'account_id' => :'account_id', :'name' => :'name', :'image_url' => :'image_url', :'charge_free_type' => :'charge_free_type', :'charge_free_limit' => :'charge_free_limit', :'charge_type' => :'charge_type', :'charge' => :'charge', :'tax_included' => :'tax_included', :'slip_number_use' => :'slip_number_use', :'slip_number_url' => :'slip_number_url', :'memo' => :'memo', :'memo2' => :'memo2', :'sort' => :'sort', :'display_state' => :'display_state', :'preferred_date_use' => :'preferred_date_use', :'preferred_period_use' => :'preferred_period_use', :'make_date' => :'make_date', :'update_date' => :'update_date' } end # Attribute type mapping. def self.openapi_types { :'id' => :'Integer', :'account_id' => :'String', :'name' => :'String', :'image_url' => :'String', :'charge_free_type' => :'String', :'charge_free_limit' => :'Integer', :'charge_type' => :'String', :'charge' => :'Object', :'tax_included' => :'BOOLEAN', :'slip_number_use' => :'BOOLEAN', :'slip_number_url' => :'String', :'memo' => :'String', :'memo2' => :'String', :'sort' => :'Integer', :'display_state' => :'String', :'preferred_date_use' => :'BOOLEAN', :'preferred_period_use' => :'BOOLEAN', :'make_date' => :'Integer', :'update_date' => :'Integer' } end # Initializes the object # @param [Hash] attributes Model attributes in the form of hash def initialize(attributes = {}) return unless attributes.is_a?(Hash) # convert string to symbol for hash key attributes = attributes.each_with_object({}) { |(k, v), h| h[k.to_sym] = v } if attributes.has_key?(:'id') self.id = attributes[:'id'] end if attributes.has_key?(:'account_id') self.account_id = attributes[:'account_id'] end if attributes.has_key?(:'name') self.name = attributes[:'name'] end if attributes.has_key?(:'image_url') self.image_url = attributes[:'image_url'] end if attributes.has_key?(:'charge_free_type') self.charge_free_type = attributes[:'charge_free_type'] end if attributes.has_key?(:'charge_free_limit') self.charge_free_limit = attributes[:'charge_free_limit'] end if attributes.has_key?(:'charge_type') self.charge_type = attributes[:'charge_type'] end if attributes.has_key?(:'charge') self.charge = attributes[:'charge'] end if attributes.has_key?(:'tax_included') self.tax_included = attributes[:'tax_included'] end if attributes.has_key?(:'slip_number_use') self.slip_number_use = attributes[:'slip_number_use'] end if attributes.has_key?(:'slip_number_url') self.slip_number_url = attributes[:'slip_number_url'] end if attributes.has_key?(:'memo') self.memo = attributes[:'memo'] end if attributes.has_key?(:'memo2') self.memo2 = attributes[:'memo2'] end if attributes.has_key?(:'sort') self.sort = attributes[:'sort'] end if attributes.has_key?(:'display_state') self.display_state = attributes[:'display_state'] end if attributes.has_key?(:'preferred_date_use') self.preferred_date_use = attributes[:'preferred_date_use'] end if attributes.has_key?(:'preferred_period_use') self.preferred_period_use = attributes[:'preferred_period_use'] end if attributes.has_key?(:'make_date') self.make_date = attributes[:'make_date'] end if attributes.has_key?(:'update_date') self.update_date = attributes[:'update_date'] end end # Show invalid properties with the reasons. Usually used together with valid? # @return Array for valid properties with the reasons def list_invalid_properties invalid_properties = Array.new invalid_properties end # Check to see if the all the properties in the model are valid # @return true if the model is valid def valid? charge_free_type_validator = EnumAttributeValidator.new('String', ['not_free', 'free', 'free_to_limit']) return false unless charge_free_type_validator.valid?(@charge_free_type) charge_type_validator = EnumAttributeValidator.new('String', ['fixed', 'by_price', 'by_area', 'by_weight']) return false unless charge_type_validator.valid?(@charge_type) display_state_validator = EnumAttributeValidator.new('String', ['showing', 'hidden']) return false unless display_state_validator.valid?(@display_state) true end # Custom attribute writer method checking allowed values (enum). # @param [Object] charge_free_type Object to be assigned def charge_free_type=(charge_free_type) validator = EnumAttributeValidator.new('String', ['not_free', 'free', 'free_to_limit']) unless validator.valid?(charge_free_type) fail ArgumentError, 'invalid value for "charge_free_type", must be one of #{validator.allowable_values}.' end @charge_free_type = charge_free_type end # Custom attribute writer method checking allowed values (enum). # @param [Object] charge_type Object to be assigned def charge_type=(charge_type) validator = EnumAttributeValidator.new('String', ['fixed', 'by_price', 'by_area', 'by_weight']) unless validator.valid?(charge_type) fail ArgumentError, 'invalid value for "charge_type", must be one of #{validator.allowable_values}.' end @charge_type = charge_type end # Custom attribute writer method checking allowed values (enum). # @param [Object] display_state Object to be assigned def display_state=(display_state) validator = EnumAttributeValidator.new('String', ['showing', 'hidden']) unless validator.valid?(display_state) fail ArgumentError, 'invalid value for "display_state", must be one of #{validator.allowable_values}.' end @display_state = display_state end # Checks equality by comparing each attribute. # @param [Object] Object to be compared def ==(o) return true if self.equal?(o) self.class == o.class && id == o.id && account_id == o.account_id && name == o.name && image_url == o.image_url && charge_free_type == o.charge_free_type && charge_free_limit == o.charge_free_limit && charge_type == o.charge_type && charge == o.charge && tax_included == o.tax_included && slip_number_use == o.slip_number_use && slip_number_url == o.slip_number_url && memo == o.memo && memo2 == o.memo2 && sort == o.sort && display_state == o.display_state && preferred_date_use == o.preferred_date_use && preferred_period_use == o.preferred_period_use && make_date == o.make_date && update_date == o.update_date end # @see the `==` method # @param [Object] Object to be compared def eql?(o) self == o end # Calculates hash code according to all attributes. # @return [Fixnum] Hash code def hash [id, account_id, name, image_url, charge_free_type, charge_free_limit, charge_type, charge, tax_included, slip_number_use, slip_number_url, memo, memo2, sort, display_state, preferred_date_use, preferred_period_use, make_date, update_date].hash end # Builds the object from hash # @param [Hash] attributes Model attributes in the form of hash # @return [Object] Returns the model itself def build_from_hash(attributes) return nil unless attributes.is_a?(Hash) self.class.openapi_types.each_pair do |key, type| if type =~ /\AArray<(.*)>/i # check to ensure the input is an array given that the the attribute # is documented as an array but the input is not if attributes[self.class.attribute_map[key]].is_a?(Array) self.send("#{key}=", attributes[self.class.attribute_map[key]].map { |v| _deserialize($1, v) }) end elsif !attributes[self.class.attribute_map[key]].nil? self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]])) end # or else data not found in attributes(hash), not an issue as the data can be optional end self end # Deserializes the data based on type # @param string type Data type # @param string value Value to be deserialized # @return [Object] Deserialized data def _deserialize(type, value) case type.to_sym when :DateTime DateTime.parse(value) when :Date Date.parse(value) when :String value.to_s when :Integer value.to_i when :Float value.to_f when :BOOLEAN if value.to_s =~ /\A(true|t|yes|y|1)\z/i true else false end when :Object # generic object (usually a Hash), return directly value when /\AArray<(?.+)>\z/ inner_type = Regexp.last_match[:inner_type] value.map { |v| _deserialize(inner_type, v) } when /\AHash<(?.+?), (?.+)>\z/ k_type = Regexp.last_match[:k_type] v_type = Regexp.last_match[:v_type] {}.tap do |hash| value.each do |k, v| hash[_deserialize(k_type, k)] = _deserialize(v_type, v) end end else # model temp_model = ColorMeShop.const_get(type).new temp_model.build_from_hash(value) end end # Returns the string representation of the object # @return [String] String presentation of the object def to_s to_hash.to_s end # to_body is an alias to to_hash (backward compatibility) # @return [Hash] Returns the object in the form of hash def to_body to_hash end # Returns the object in the form of hash # @return [Hash] Returns the object in the form of hash def to_hash hash = {} self.class.attribute_map.each_pair do |attr, param| value = self.send(attr) next if value.nil? hash[param] = _to_hash(value) end hash end # Outputs non-array value in the form of hash # For object, use to_hash. Otherwise, just return the value # @param [Object] value Any valid value # @return [Hash] Returns the value in the form of hash def _to_hash(value) if value.is_a?(Array) value.compact.map { |v| _to_hash(v) } elsif value.is_a?(Hash) {}.tap do |hash| value.each { |k, v| hash[k] = _to_hash(v) } end elsif value.respond_to? :to_hash value.to_hash else value end end end end