class MagentoRestApi::Connection
This Gem will enable you to communicate to the rest api of magento 1.9.x You first need to authenticate this app to your magento by running the command % authenticate Example:
% irb
>> require 'restfull_oauth' >> service = RestfullOauth::Connection.new({"consumer_key"=>"your_consumer_key", "consumer_secret"=>"your_consumer_secret", "token"=>"your_token", "token_secret"=>"your_token_secret"}) >> post_data = {'foo' => 'bar' } >> response = MagentoRestApi::connect('POST','https://your magento server/api/rest/products/200', post_data) => #<Net::HTTPOK 200 OK readbody=true> >> puts JSON.parse(response.body).to_yaml
Public Class Methods
new(config = {})
click to toggle source
# File lib/magento_rest_api.rb, line 27 def initialize(config = {}) @config = config self end
Public Instance Methods
connect(method, uri, post_data=nil)
click to toggle source
# File lib/magento_rest_api.rb, line 32 def connect(method, uri, post_data=nil) if (method == "GET") access_token = prepare_access_token(uri,@config) params = post_data ? "?" + URI.encode_www_form(post_data) : "" return access_token.request(:get, uri + params) end params = params(@config['consumer_key'], @config['token'] ) signature_base_string = signature_base_string(method, uri.to_s, params) signing_key = @config['consumer_secret'] + '&' + @config['token_secret'] params['oauth_signature'] = url_encode(sign(signing_key, signature_base_string)) header_string = create_header(params) json_response = request_data(header_string, uri, method, post_data.to_json) end
Private Instance Methods
create_header(params)
click to toggle source
# File lib/magento_rest_api.rb, line 78 def create_header(params) header = "OAuth " params.each do |k, v| header += "#{k}=\"#{v}\"," end header.slice(0..-2) end
generate_nonce(size=6)
click to toggle source
# File lib/magento_rest_api.rb, line 48 def generate_nonce(size=6) Base64.encode64(OpenSSL::Random.random_bytes(size)).gsub(/\W/, '') end
params(consumer_key, token)
click to toggle source
# File lib/magento_rest_api.rb, line 56 def params(consumer_key, token) params = { 'oauth_consumer_key' => consumer_key, 'oauth_nonce' => generate_nonce, 'oauth_signature_method' => 'HMAC-SHA1', 'oauth_token' => token, 'oauth_version' => '1.0', 'oauth_timestamp' => Time.now.to_i.to_s } end
prepare_access_token(uri, keys)
click to toggle source
# File lib/magento_rest_api.rb, line 86 def prepare_access_token(uri, keys) uri = URI(uri) consumer = OAuth::Consumer.new(keys['consumer_key'], keys['consumer_secret'], { :site => uri.host, :scheme => :header }) token_hash = { :oauth_token => keys['token'], :oauth_token_secret => keys['token_secret'] } access_token = OAuth::AccessToken.from_hash(consumer, token_hash ) return access_token end
request_data(header, uri, method, send_data=nil)
click to toggle source
# File lib/magento_rest_api.rb, line 94 def request_data(header, uri, method, send_data=nil) uri = URI(uri) http = Net::HTTP.new(uri.host, uri.port) if (uri.port == 443) http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE end if method == 'DELETE' elsif method == 'PUT' request = Net::HTTP::Put.new(uri.path) headers = { 'Authorization' => header, "Content-Type" => "application/json" } headers.keys.each do |key| request[key] = headers[key] end request.body = send_data resp, data = http.request(request) else resp, data = http.post(uri.path, send_data, { 'Authorization' => header, "Content-Type" => "application/json; charset=utf-8" }) end resp end
sign(key, base_string)
click to toggle source
# File lib/magento_rest_api.rb, line 72 def sign(key, base_string) digest = OpenSSL::Digest.new('sha1') hmac = OpenSSL::HMAC.digest(digest, key, base_string) Base64.encode64(hmac).chomp.gsub(/\n/, '') end
signature_base_string(method, uri, params)
click to toggle source
# File lib/magento_rest_api.rb, line 67 def signature_base_string(method, uri, params) encoded_params = url_encode("oauth_consumer_key=#{params['oauth_consumer_key']}&oauth_nonce=#{params['oauth_nonce']}&oauth_signature_method=#{params['oauth_signature_method']}&oauth_timestamp=#{params['oauth_timestamp']}&oauth_token=#{params['oauth_token']}&oauth_version=#{params['oauth_version']}") encoded = method + '&' + url_encode(uri) + '&' + encoded_params end
url_encode(string)
click to toggle source
# File lib/magento_rest_api.rb, line 52 def url_encode(string) CGI::escape(string) end