我按照Shopify说明获取特定应用/商店组合的永久令牌(http://api.shopify.com/authentication.html)。
我可以获取临时令牌,然后使用简单的html表单来接收永久令牌:
但我得到的回应是:{“error”:“invalid_request”}
你能帮助我吗? 我到处搜索(Stackoverflow,Shopify支持论坛等等),但找不到如何解决这个问题的线索。 我的应用程序在线并在Heroku上托管。谢谢,
答案 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
现在包含两件事:
url
)token
)正如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_domain
和access_token
属性。
将来,如果我想将ShopifyAPI用于该商店,我可以按照shopify_api gem homepage
上的说明操作我花了好几个小时试图解决这个问题。我不确定文档如何更清晰。希望如果问题再次出现,人们会找到这个StackOverflow页面!
我希望这对你有帮助。
干杯, 尼克
答案 1 :(得分:1)
一旦代码过期,您需要存储令牌或请求新代码。在日志中,您的一个请求成功,然后您继续使用相同的代码进行访问令牌请求,因为代码已过期而失败。
再次尝试请求权限,并使用您收到的新代码调用访问令牌。确保存储访问令牌,因为代码不能再次使用。