2012-06-30 2 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 (идентификатор клиента). Спасибо за ваш интерес! – 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 

Строка 3 этого (ShopifyAPI::Session.new) делает Step 2 of the Shopify Authentication для нас. Это дает нам постоянный токен доступа.

Переменная sess теперь содержит две вещи:

  1. Символ * .myshopify.com домен магазина (url)
  2. постоянный маркер доступа, чтобы сохранить для будущего использования (token)

Как сказал Джон Дафф - у нас уже есть токен доступа! Нам не нужно POST до https://SHOP_NAME.myshopify.com/admin/oauth/access_token. Он обрабатывается для нас в коде, создаваемом камнем 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) 
    ... 

Это создает магазин и присваивает ему маркер доступа. Модель моего магазина имеет атрибуты myshopify_domain и access_token.

В будущем, если я хочу использовать ShopifyAPI для этого магазина, я могу просто следовать инструкциям, приведенным на shopify_api gem homepage

Я провел часы, пытаясь Nut этот. Я не уверен, как документация может быть более четкой. Надеемся, что если проблема снова возникнет, люди найдут эту страницу StackOverflow!

Надеюсь, это помогло вам.

Cheers, Ник

+1

Спасибо, Ник, я только что вернулся в офис из нескольких дней отпуска и нашел ваш замечательный ответ. Большое вам спасибо, ваше решение работает красиво. Не могу понять, почему драгоценный камень в магазине не говорит об этом четко! – 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

Смежные вопросы