Sha256: fffe288f9b4f02ccae7e2e7efe4853c30d8c81e21e8b5de38f3a5d824d6eeed0

Contents?: true

Size: 1.89 KB

Versions: 1

Compression:

Stored size: 1.89 KB

Contents

require 'net/http'
require 'uri'
require 'md5'
require 'timeout'
module TaobaoApi

  module BaseApi
    class ConfigKeysError   < StandardError; end
    class ConfigValuesError < StandardError; end 

    mattr_reader :config

    def self.included(receiver)
      receiver.extend         ClassMethods
      receiver.send :include, InstanceMethods
    end

    def self.init_config
      @@config = YAML::load_file("#{RAILS_ROOT}/config/taobao_api.yml")['taobao_api'].symbolize_keys
      valid_config
    end

    def self.valid_config
      @@config.assert_valid_keys :api_url, :secret_code, :pid, :api_key, :timeout, :outer_code rescue raise ConfigKeysError.new
      @@config.values.map { |v| raise ConfigValuesError.new if v.blank? }
    end

    init_config

    module ClassMethods

      #获得淘宝API返回的json数据
      #返回结果是Hash
      def taobao_api_get(options = {})
        Timeout::timeout(BaseApi.config[:timeout].to_f) do
          return ActiveResource::Formats::JsonFormat.decode(Net::HTTP.post_form(URI::parse(BaseApi.config[:api_url]), get_taobao_options(options)).body) 
        end
      rescue Exception => e
        ActiveRecord::Base.logger.error("#{e}\n#{e.backtrace.join('\n')}")
        return {}
      end

      protected
      #get taobao request options
      def get_taobao_options(options = {})
        taobao_options        = taobao_config_options.merge(options)
        taobao_options[:sign] = encrypt(taobao_options.stringify_keys.sort.flatten.join).upcase
        taobao_options
      end

      def taobao_config_options
        {
          :api_key     => BaseApi.config[:api_key],
          :format      => 'json',
          :v           => '2.0',
          :sign_method => 'md5'
        }
      end

      def encrypt(str)
        MD5.hexdigest(BaseApi.config[:secret_code] + str + BaseApi.config[:secret_code])
      end
    end

    module InstanceMethods

    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
taobao_api-0.2.1 lib/taobao_api/base_api.rb