无法为我的Shopify应用程序接收永久访问令牌

时间:2012-06-30 10:47:56

标签: oauth access-token shopify

我按照Shopify说明获取特定应用/商店组合的永久令牌(http://api.shopify.com/authentication.html)。

我可以获取临时令牌,然后使用简单的html表单来接收永久令牌:

                   

但我得到的回应是:{“error”:“invalid_request”}

你能帮助我吗? 我到处搜索(Stackoverflow,Shopify支持论坛等等),但找不到如何解决这个问题的线索。 我的应用程序在线并在Heroku上托管。

谢谢,

image 3 image 2 image 1

2 个答案:

答案 0 :(得分:9)

我认为我们有类似的想法!我遇到了与你完全相同的问题。我想我们都被文档搞糊涂了!

我使用shopify_app gem生成了我的应用。这在login_controller.rb中创建了以下方法:

def finalize
  if response = request.env['omniauth.auth']
    sess = ShopifyAPI::Session.new(params['shop'], response['credentials']['token'])
    session[:shopify] = sess        
    flash[:notice] = "Logged in"
    redirect_to return_address
    session[:return_to] = nil
  else
    flash[:error] = "Could not log in to Shopify store."
    redirect_to :action => 'index'
  end
end

第3行(ShopifyAPI::Session.new)为我们做了Step 2 of the Shopify Authentication。它正在为我们提供永久访问令牌。

变量sess现在包含两件事:

  1. 商店的* .myshopify.com域名(url
  2. 要保存以供将来使用的永久访问令牌token
  3. 正如John Duff所说 - 我们已经拥有了一个访问令牌! 我们不需要发布https://SHOP_NAME.myshopify.com/admin/oauth/access_token。它是由shopify_app gem生成的代码中为我们处理的。

    在我的终结方法中,我添加了一行:

    def finalize
      if response = request.env['omniauth.auth']
        sess = ShopifyAPI::Session.new(params['shop'], response['credentials']['token'])
    
        Shop.find_or_create_by_myshopify_domain(sess.url, access_token: sess.token)
      ...
    

    这会创建一个商店并为其分配访问令牌。我的商店模型具有myshopify_domainaccess_token属性。

    将来,如果我想将ShopifyAPI用于该商店,我可以按照shopify_api gem homepage

    上的说明操作

    我花了好几个小时试图解决这个问题。我不确定文档如何更清晰。希望如果问题再次出现,人们会找到这个StackOverflow页面!

    我希望这对你有帮助。

    干杯, 尼克

答案 1 :(得分:1)

一旦代码过期,您需要存储令牌或请求新代码。在日志中,您的一个请求成功,然后您继续使用相同的代码进行访问令牌请求,因为代码已过期而失败。

再次尝试请求权限,并使用您收到的新代码调用访问令牌。确保存储访问令牌,因为代码不能再次使用。