2012-06-30 25 views
5

Estoy siguiendo las instrucciones de Shopify para obtener un token permanente para una combinación de aplicación/tienda en particular (http://api.shopify.com/authentication.html).No se puede recibir un token de acceso permanente para mi aplicación Shopify

soy capaz de obtener el comprobante temporal y luego usar un simple formulario HTML para recibir una muestra permanente:

Pero la respuesta que obtengo es: { "error" : "invalid_request"}

¿Me puede ayudar, por favor? Busqué en todas partes (Stackoverflow, foros de soporte de Shopify, etc.) pero no puedo encontrar una pista sobre cómo solucionarlo. Mi aplicación está en línea y alojada en Heroku.

Gracias,

image 3 image 2 image 1

+0

Se puede publicar la solicitud de prima y la respuesta? La clave de API que está utilizando también ayudaría. –

+0

Agregué algunas imágenes que muestran la respuesta completa que recibo. También está la clave API (id del cliente). ¡Gracias por tu interés! – Augusto

Respuesta

9

¡Creo que tenemos mentes similares! Estaba experimentando exactamente el mismo problema que tú. ¡Creo que estábamos confundidos por la documentación!

He generado mi aplicación usando la gema shopify_app. Esto creó el siguiente método en 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 

Línea 3 del mismo (ShopifyAPI::Session.new) está haciendo Step 2 of the Shopify Authentication para nosotros. Nos está buscando un token de acceso permanente.

La variable sess ahora contendrá dos cosas:

  1. El * .myshopify.com dominio de la tienda (url)
  2. Un token de acceso permanente a ahorrar para su uso futuro (token)

Como dijo John Duff, ¡ya tenemos un token de acceso! No necesitamos POSTAR a https://SHOP_NAME.myshopify.com/admin/oauth/access_token. Se maneja para nosotros en el código generado por la gema shopify_app.

En mi método finalize, he añadido una línea:

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) 
    ... 

Esto crea una tienda y le asigna el testigo de acceso. Mi modelo de tienda tiene los atributos myshopify_domain y access_token.

En el futuro, si quiero usar el ShopifyAPI de esa tienda, sólo puede seguir las instrucciones que se encuentran en la shopify_api gem homepage

pasé horas tratando de tuerca de éste hacia fuera. No estoy seguro de cómo la documentación podría ser más clara. Con suerte, si vuelve a surgir el problema, la gente encuentra esta página de StackOverflow.

Espero que esto haya sido una ayuda para usted.

Cheers, Nick

+1

Gracias Nick, acabo de regresar a la oficina después de unos días de vacaciones y encontré tu increíble respuesta. Muchas gracias, tu solución funcionó maravillosamente. ¡No entiendo por qué la gema Shopify no dice esto claramente! – Augusto

+0

Bam. Si pudiera votar esto más de una vez, lo haría. Tal vez implementaré una gema complementaria 'shopify_app' que brinda fácilmente la opción de almacenar tokens permanentes. –

+0

En mis pruebas, el token devuelto en env ['omniauth.auth'] ['credentials'] ['token'] es el mismo que el token "exchanged". ¿No es ese el caso para otros? – Arrel

1

Una vez que se utiliza el código una vez que expire, lo que necesita para almacenar la ficha o solicitar un nuevo código. En los registros, una de sus solicitudes fue exitosa, luego continuó haciendo solicitudes de token de acceso con el mismo código que falló debido a que el código había expirado.

Intente solicitar nuevamente permiso y realice la llamada token de acceso con el nuevo código que recibe. Asegúrese de guardar el token de acceso porque el código no se puede usar de nuevo.

+0

Gracias John, tienes razón, pero nunca logré recibir un código de acceso válido. Intenté con 3 tokens diferentes, pero incluso cuando un token es nuevo y nunca se usa antes, obtengo la misma respuesta: {"error": "invalid_request"} :( – Augusto

+0

Esto no es lo que veo en los registros de solicitud, creo puede haber algo con cualquier biblioteca que esté usando. ¿Lo ha probado con cURL desde la línea de comando? –

+0

Gracias John, traté de solicitar un nuevo código y luego intentar nuevamente recibir un nuevo código de acceso con este comando de línea de comando cURL: curl -d "client_id = xxx & client_secret = xxx & code = xxx" https://discoverstore.myshopify.com/admin/oauth/access_token – Augusto

Cuestiones relacionadas