2012-06-30 1 views
5

Shopify 지침에 따라 특정 앱/상점 조합 (http://api.shopify.com/authentication.html)의 영구 토큰을받습니다. 나는 임시 토큰을 얻을하고 영구적 인 토큰을받을 간단한 HTML 양식을 사용 할 수있어내 Shopify 앱에 대한 영구 액세스 토큰을받을 수 없습니다.

: 내가 얻을

그러나 응답은 다음과 같습니다 { "오류" : "invalid_request"}

제발 도와 주시겠습니까? 어디서나 검색 (Stackoverflow, Shopify 지원 포럼 등)하지만 해결 방법에 대한 단서를 찾을 수 없습니다. 내 앱이 온라인이며 Heroku에서 호스팅됩니다.

감사가 만료되면 코드가 사용되면 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)
  3. 을 위해 저장하는 영구 액세스 토큰

존 더프 (John Duff)가 말했듯이 - 이미 액세스 토큰이 있습니다! 부터 https://SHOP_NAME.myshopify.com/admin/oauth/access_token까지 POST 할 필요가 없습니다. shopify_app 보석으로 생성 된 코드에서 처리됩니다. 이 가게를 만들고 그것을 액세스 토큰을 할당

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_domain이고 access_token입니다.나는 그 가게의 ShopifyAPI을 사용하려는 경우 향후

은, 난 그냥이 일을 너트하려고 시간을 보냈다 shopify_api gem homepage

에있는 지침을 따를 수 있습니다. 나는 문서가 어떻게 더 명확해질 지 확신하지 못한다. 다행스럽게도 문제가 다시 발생하면 사람들은이 StackOverflow 페이지를 찾게됩니다!

도움이 되었기를 바랍니다.

건배, 닉

+1

감사합니다. Nick, 방금 며칠간 사무실로 돌아와서 멋진 답변을 찾았습니다. 대단히 감사합니다. 당신의 솔루션은 아름답게 작동했습니다. shopify 보석이 이것을 분명히 말하지 않는 이유를 알 수 없습니다! – Augusto

+0

Bam. 내가 한 번 이상 이걸 상향 줄 수 있다면. 아마도 영구 토큰을 저장할 수있는 옵션을 쉽게 제공하는 'shopify_app'부가 기능 젬을 출시 할 것입니다. –

+0

내 테스트에서 env [ 'omniauth.auth'] [ 'credentials'] [ 'token']에 반환 된 토큰은 "exchanged"토큰과 같습니다. 다른 사람들에게는 그렇지 않은가요? – Arrel

1

image 3, 당신은 토큰을 저장해야하거나 새 코드를 요청합니다. 로그에서 요청 중 하나가 성공하면 코드 만료로 인해 실패한 동일한 코드로 액세스 토큰 요청을 계속 수행합니다.

권한을 다시 요청하고 수신 한 새 코드로 액세스 토큰 호출을 시도하십시오. 코드를 다시 사용할 수 없으므로 액세스 토큰을 저장하십시오.

+0

감사합니다. 존, 맞습니다. 그러나 유효한 액세스 코드를받지 못했습니다. 나는 3 개의 다른 토큰으로 시도했지만 토큰이 새 것이고 동일한 응답을 받기 전에 사용하지 않았을 때조차도 : { "error": "invalid_request"} :( – Augusto

+0

이것은 요청 로그에서 보는 것이 아닙니다. 명령 줄에서 cURL을 사용해 보셨습니까? –

+0

감사합니다. John, 새로운 코드를 요청한 다음이 cURL 명령 줄 명령을 사용하여 새 액세스 코드를 다시 받으려고했습니다. curl -d "client_id = xxx & client_secret = xxx & code = xxx"https://discoverstore.myshopify.com/admin/oauth/access_token – Augusto