【问题标题】:How do I access the Magento REST API with Ruby?如何使用 Ruby 访问 Magento REST API?
【发布时间】:2015-05-13 03:23:49
【问题描述】:

我想开始使用 Magento 的 REST API,但我似乎无法让它工作。

首先我需要获取访问令牌,这就是我正在尝试的:

require 'oauth'

@consumer = OAuth::Consumer.new("4200100753b2c8b03bde1f5b062c5a80", "c06abdcb734c85dfd7bb115c6a67ae4d", {:site=>"http://178.62.173.99/"})
@request_token = @consumer.get_request_token

# => oauth-0.4.7/lib/oauth/consumer.rb:216:in `token_request': 404 Not Found (OAuth::Unauthorized)

但我不断收到404 错误。

接下来我应该尝试什么?

【问题讨论】:

    标签: ruby rest magento oauth


    【解决方案1】:

    这是我编写的一个 Ruby 模块,用于为 Magento REST API 创建访问令牌:

    module Token
      def create_consumer
        OAuth::Consumer.new(
          CONSUMER_KEY,
          CONSUMER_SECRET,
          :request_token_path => '/oauth/initiate',
          :authorize_path=>'/admin/oauth_authorize',
          :access_token_path=>'/oauth/token',
          :site => URL
        )
      end
    
      def request_token(args = {})
        args[:consumer].get_request_token(:oauth_callback => URL)
      end
    
      def get_authorize_url(args = {})
        args[:request_token].authorize_url(:oauth_callback => URL)
      end
    
      def authorize_application(args = {})
        m = Mechanize.new
    
        m.get(args[:authorize_url]) do |login_page|
          auth_page = login_page.form_with(:action => "#{URL}/index.php/admin/oauth_authorize/index/") do |form|
            form.elements[1].value = ADMIN_USERNAME
            form.elements[2].value = ADMIN_PASSWORD
          end.submit
    
          authorize_form = auth_page.forms[0]
    
          @callback_page = authorize_form.submit
        end
    
        @callback_page.uri.to_s
      end
    
      def extract_oauth_verifier(args = {})
        callback_page = "#{args[:callback_page]}".gsub!("#{URL}/?", '')
    
        callback_page_query_string = CGI::parse(callback_page)
    
        callback_page_query_string['oauth_verifier'][0]
      end
    
      def get_access_token(args = {})
        args[:request_token].get_access_token(:oauth_verifier => args[:oauth_verifier])
      end
    
      def save_tokens_to_json(args = {})
        auth = {}
    
        auth[:time] = Time.now
        auth[:token] = args[:access_token].token
        auth[:secret] = args[:access_token].secret
    
        File.open("#{args[:path]}#{args[:filename]}.json", 'w') {|f| f.write(auth.to_json)}
    
        auth
      end
    
      def get_new_access_tokens
        new_consumer = self.create_consumer
        new_request_token = self.request_token(consumer: new_consumer)
        new_authorize_url = self.get_authorize_url(request_token: new_request_token)
        authorize_new_application = self.authorize_application(authorize_url: new_authorize_url)
        extract_new_oauth_verifier = self.extract_oauth_verifier(callback_page: authorize_new_application)
        new_access_token = self.get_access_token(request_token: new_request_token, oauth_verifier: extract_new_oauth_verifier)
        save_tokens_to_json(filename: 'magento_oauth_access_tokens', path: '/', access_token: new_access_token)
    
        return 'Successfully obtained new access tokens.'
      end
    end
    

    运行#get_new_access_tokens 以获取访问令牌。

    别忘了定义以下变量:

    • CONSUMER_KEY
    • CONSUMER_SECRET
    • 网址
    • ADMIN_USERNAME
    • 管理员密码

    【讨论】:

      【解决方案2】:

      查看mage on rails。它应该开箱即用。查看 this page 以获取展示 oauth 流程的带注释的 ruby​​ 代码

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-06-03
        • 2017-12-20
        • 2013-04-12
        • 2012-10-07
        • 1970-01-01
        • 2015-04-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多