5

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

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

但我得到的响应是:{"error":"invalid_request"}

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

谢谢,

图 3 图 2 图 1

4

2 回答 2

9

我想我们有相似的想法!我遇到了和你完全相同的问题。我想我们都被文档弄糊涂了!

我使用shopify_appgem 生成了我的应用程序。这在中创建了以下方法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

( ShopifyAPI::Session.new) 的第 3 行正在为我们执行 Shopify 身份验证的第 2 步。它正在为我们获取永久访问令牌。

该变量sess现在将包含两件事:

  1. 商店的 *.myshopify.com 域 ( url)
  2. 永久访问令牌以供将来使用( token)

正如 John Duff 所说——我们已经有了访问令牌!我们不需要 POSThttps://SHOP_NAME.myshopify.com/admin/oauth/access_token. shopify_app它在gem生成的代码中为我们处理。

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

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)
  ...

这将创建一个商店并为其分配访问令牌。My Shop 模型具有属性myshopify_domainaccess_token.

将来,如果我想为该商店使用 ShopifyAPI,我可以按照shopify_api gem 主页上的说明进行操作

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

我希望这对你有帮助。

干杯,尼克

于 2012-07-07T09:02:36.263 回答
1

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

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

于 2012-07-02T00:52:59.237 回答