2012-06-30 83 views
5

我遵循Shopify說明獲取特定應用程序/商店組合的永久令牌(http://api.shopify.com/authentication.html)。無法爲我的Shopify應用程序接收永久訪問令牌

我能夠獲得臨時令牌,然後使用一個簡單的HTML表單獲得一個永久的標記:

但響應我得到的是:{「錯誤」 :「invalid_request」}

請問您能幫我嗎? 我到處搜索(Stackoverflow,Shopify支持論壇等),但無法找到解決此問題的線索。 我的應用程序在線並在Heroku上託管。

感謝,

image 3 image 2 image 1

+0

你能發佈的原始請求和響應?您正在使用的API密鑰也會有幫助。 –

+0

我添加了一些圖片,顯示我得到的完整回覆。還有API密鑰(客戶端ID)。感謝您的關注! – Augusto

回答

9

我想我們有類似的想法!我遇到了和你一樣的問題。我認爲我們都被文檔弄糊塗了!

我生成我的應用程序使用shopify_app寶石。這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做Step 2 of the Shopify Authentication我們。它爲我們提供了一個永久訪問令牌。

變量sess現在將包含兩件事情:

  1. 的* .myshopify.com店的域(url
  2. 永久訪問令牌保存以備將來使用token

正如John Duff所說 - 我們已經有了訪問令牌! 我們不需要郵寄https://SHOP_NAME.myshopify.com/admin/oauth/access_token。它是由shopify_app寶石生成的代碼爲我們處理的。

在我的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) 
    ... 

這將創建一個店鋪,併爲其分配訪問令牌。我的商店模型具有屬性myshopify_domainaccess_token

在未來,如果我想使用ShopifyAPI對於店,我可以只需按照shopify_api gem homepage

上的說明,我花了幾個小時試圖螺母這一個。我不確定文檔如何更清晰。希望如果問題再次出現,人們會發現這個StackOverflow頁面!

我希望這對你有所幫助。

乾杯, 尼克

+1

謝謝尼克,我剛從幾天的假期回到辦公室,發現你真棒的回覆。非常感謝你,你的解決方案工作得很好。無法弄清爲什麼shopify寶石沒有說清楚這一點! – Augusto

+0

Bam。如果我可以不止一次地加註這個詞。也許我會推出一個'shopify_app'附加寶石,它很容易提供存儲永久令牌的選項。 –

+0

在測試中,在env ['omniauth.auth'] ['credentials'] ['token']中返回的標記與「交換」標記相同。其他人不是這樣嗎? – Arrel

1

一旦一旦期滿時使用的代碼,你需要存儲的令牌或申請新的代碼。在日誌中,您的一個請求成功了,然後您繼續使用相同的代碼訪問令牌請求,該代碼由於代碼已過期而失敗。

嘗試再次請求權限並使用您收到的新代碼進行訪問令牌調用。請確保存儲訪問令牌,因爲代碼不能再次使用。

+0

謝謝約翰,你是對的,但我從來沒有成功接收到有效的訪問代碼。我嘗試了3種不同的令牌,但是即使當令牌是新的並且在我得到相同的回覆之前從未使用:{「error」:「invalid_request」} :( – Augusto

+0

這不是我從請求日誌中看到的,我認爲你有沒有試過用cURL從命令行試試它? –

+0

謝謝約翰,我試過要求一個新的代碼,然後再次嘗試用這個cURL命令行命令接收一個新的訪問代碼: curl -d「client_id = xxx&client_secret = xxx&code = xxx」https://discoverstore.myshopify.com/admin/oauth/access_token – Augusto

相關問題