2012-06-30 15 views
5

Shopifyの指示に従って、特定のアプリ/ショップの組み合わせ(http://api.shopify.com/authentication.html)の永久トークンを取得しています。私は一時的なトークンを取得し、永久トークン受信する単純なHTMLフォームを使用することができるよShopify Appの常設アクセストークンを受け取ることができません

:私が得る

しかし、応答は次のとおりです。{「エラー」 : "invalid_request"}

私を助けてもらえますか? 私はどこでも検索しましたが(Stackoverflow、Shopifyサポートフォーラムなど...)、これを解決する手がかりを見つけることはできません。 私のアプリはオンラインで、Herokuでホストされています。

おかげで、それは有効期限が切れた後のコードが使用されると image 2 image 1

+0

あなたは生のリクエストとレスポンスを投稿することができますか?使用しているAPIキーも同様に役立ちます。 –

+0

私は完全な応答を示すいくつかの画像を追加しました。 APIキー(クライアントID)もあります。あなたの興味に感謝します! – Augusto

答えて

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をPOSTする必要はありません。これは、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) 
    ... 

これはお店を作成し、それをアクセストークンを割り当てます。マイショップモデルの属性はmyshopify_domainaccess_tokenです。私はその店のためShopifyAPIを使用したい場合には、将来に

、私はちょうど私がこの1つをナットにしようと時間を費やしshopify_api gem homepage

で見つかった指示に従うことができます。私はドキュメントがどのように明確になるのか分かりません。うまくいけば、問題が再発すると、人々はこのStackOverflowページを見つけます!

私はこれがあなたにとって助けになることを願っています。

乾杯は、 ニック

+1

ありがとう、ニック、私はちょうど休日の数日からオフィスに戻って、あなたのすばらしい返事を見つけました。非常にありがとう、あなたのソリューションは美しく働いた。 shopifyの宝石がこれを明確に言っていない理由を理解できません! – Augusto

+0

Bam。もし私がこれを何度もアップヴォートすることができたら、私はそうするでしょう。おそらく、永続的なトークンを保存するオプションを簡単に提供する「shopify_app」アドオンの宝石を用意しています。 –

+0

私のテストでは、env ['omniauth.auth'] ['credentials'] ['token']で返されるトークンは、 "exchanged"トークンと同じです。それは他の人にとっては当てはまりませんか? – Arrel

1

image 3は、あなたがトークンを格納する必要がありますか、新しいコードを要求します。ログで要求の1つが成功した場合、コードが期限切れになったために失敗した同じコードでアクセストークン要求を作成し続けました。

アクセス許可を再度要求し、受信した新しいコードでアクセストークン呼び出しを試みてください。コードを再度使用できないため、アクセストークンを必ず保管してください。

+0

Johnさん、ありがとうございますが、有効なアクセスコードを受け取ることに成功したことはありません。私は3つの異なるトークンで試しましたが、トークンが新しく、決して使用されていないときでも、同じ返信を受け取りました:{"error": "invalid_request"} :( – Augusto

+0

これはリクエストログから見たものではありません –

+0

Johnさん、ありがとうございます。新しいコードをリクエストしてから、このcURLコマンドラインコマンドで新しいアクセスコードを受け取ろうとしました: curl -d "client_id = xxx&client_secret = xxx&code = xxx" https://discoverstore.myshopify.com/admin/oauth/access_token – Augusto

関連する問題