t4traw/yahoo_store_api

View on GitHub
lib/yahoo_store_api.rb

Summary

Maintainability
A
0 mins
Test Coverage
require "yahoo_store_api/version"
require "yahoo_store_api/helper.rb"
require "yahoo_store_api/item.rb"
require "yahoo_store_api/image.rb"
require "yahoo_store_api/stock.rb"
require "yahoo_store_api/publish.rb"

require "rexml/document"
require "yaml"
require "uri"
require "cgi"
require "faraday"
require "active_support"
require "active_support/core_ext"
require "active_model"

module YahooStoreApi
  class Client
    attr_reader :refresh_token
    include YahooStoreApi::Item
    include YahooStoreApi::Image
    include YahooStoreApi::Stock
    include YahooStoreApi::Publish

    def initialize(seller_id:, application_id:, application_secret:, authorization_code: nil, redirect_uri: nil, refresh_token: nil)
      @seller_id = seller_id
      @application_id = application_id
      @application_secret = application_secret
      @redirect_uri = redirect_uri ? "&redirect_uri=" + CGI.escape(redirect_uri) : nil
      @access_token = refresh_token.present? ? refresh_access_token(refresh_token) : get_access_token(authorization_code)
    end

    private

    ACCESS_TOKEN_ENDPOINT = "https://auth.login.yahoo.co.jp/yconnect/v2/token".freeze

    def access_token_connection
      Faraday.new(url: ACCESS_TOKEN_ENDPOINT) do |c|
        c.adapter Faraday.default_adapter
        c.request :authorization, :Basic, Base64.strict_encode64("#{@application_id}:#{@application_secret}")
        c.headers["Content-Type"] = "application/x-www-form-urlencoded;charset=UTF-8"
      end
    end

    def get_access_token(authorization_code)
      param = "grant_type=authorization_code&code=#{authorization_code}#{@redirect_uri}"
      response = access_token_connection.post { |r| r.body = param }
      result = JSON.parse(response.body)
      @refresh_token = result["refresh_token"]
      result["access_token"]
    end

    def refresh_access_token(refresh_token)
      param = "grant_type=refresh_token&refresh_token=#{refresh_token}"
      response = access_token_connection.post { |r| r.body = param }
      result = JSON.parse(response.body)
      @refresh_token = refresh_token
      result["access_token"]
    end
  end
end