2017-05-16 4 views
0

Je construis une application privée Shopify qui renvoie des tarifs d'expédition personnalisés. Après le API docs, et avec l'aide de this tutorial, j'ai créé un proof-of-concept fonctionnel qui renvoie des taux de livraison d'échantillons dans mon magasin.Shopify n'obtient pas les tarifs du service personnalisé CarrierService

Cependant, cette application de preuve de concept est construite en PHP, et la version finale doit être en Ruby on Rails. J'ai donc créé une application Rails qui renvoie exactement le même contenu que l'application PHP, mais pour une raison quelconque, les tarifs n'apparaissent tout simplement pas dans le backend de Shopify. La seule chose que je remarque, c'est que les en-têtes HTTP sont différents (j'ai essayé de faire le tour avec eux pour faire correspondre l'application PHP, mais en vain). Y a-t-il quelque chose d'évident qui me manque ici?

Voici une comparaison des en-têtes de réponse HTTP:

PHP:

Connection: Keep-Alive 
Content-Encoding: gzip 
Content-Length: 186 
Content-Type: text/html; charset=UTF-8 
Date: Tue, 16 May 2017 13:00:30 GMT 
Keep-Alive: timeout=5, max=100 
Server: Apache/2.4.18 (Ubuntu) 
Vary: Accept-Encoding 

Rails:

Cache-Control: max-age=0, private, must-revalidate 
Connection: keep-alive 
Content-Encoding: gzip 
Content-Type: text/html; charset=utf-8 
Date: Tue, 16 May 2017 12:57:38 GMT 
ETag: W/"ce885edaa10636b3b7459dca958f44dd" 
Server: nginx 
Transfer-Encoding: chunked 
Vary: Accept-Encoding 
X-Request-Id: 54e2575e-c86a-4f44-a315-d0a3fbbc13f9 
X-Runtime: 0.616974 

Encore une fois, Shopify gère la réponse PHP bien, mais échoue en silence sur les rails réponse. Y a-t-il quelque chose dans ce second bloc (Rails) que Shopify pourrait rejeter? Shopify ne fournit malheureusement pas de journal des erreurs ni de moyen de déboguer ce type de problème, qu'il tire ou non les tarifs de votre application.

Voici mes Rails rates_controller.rb:

class RatesController < ApplicationController 

    def index 
    ups_rates = { 
     rates: [ 
     { 
      service_name: 'Endertech Overnight', 
      service_code: 'ETON', 
      total_price: '000', 
      currency: 'USD', 
      min_delivery_date: (DateTime.now + 1.days).strftime('%F %T %z'), 
      max_delivery_date: (DateTime.now + 2.days).strftime('%F %T %z') 
     }, 
     { 
      service_name: 'Endertech Regular', 
      service_code: 'ETREG', 
      total_price: '000', 
      currency: 'USD', 
      min_delivery_date: (DateTime.now + 3.days).strftime('%F %T %z'), 
      max_delivery_date: (DateTime.now + 7.days).strftime('%F %T %z') 
     } 
     ] 
    } 

    # Tested returning both application/json (default) or text/html 
    #render json: ups_rates 
    render body: ups_rates.to_json, content_type: "text/html" 
    end 

end 

Je me doutais bien peut-être Shopify a été mise en cache de façon très agressive, donc j'ai aussi essayé de détruire et de recréer à la fois mon application privée et le service de transport, ainsi que la modification du callback_url . Jusqu'à présent, rien n'a eu d'effet.

Merci!

+0

Hey Zac, serait-il possible pour vous de certaines de vos code? –

+0

@JoshBrown Bien sûr! J'ai ajouté le code du contrôleur Rails. Cependant, je ne suis pas sûr que cela fournira beaucoup de perspicacité - il semble sortir exactement ce que demande Shopify. (J'espère que j'ai tort!) – Zac

Répondre

1

Après beaucoup de fouilles, j'ai trouvé la réponse: Shopify demande des tarifs via POST, mais mon application ne répondait qu'à GET.

Comme une solution rapide, je créé un itinéraire statique routes.rb:

Rails.application.routes.draw do 
    post 'customrates', to: 'rates#index' 
end 

Rétrospectivement, ce fut clearly stated in the documentation, je ne l'avais pas remarqué (après tout, une demande de taux intuitivement semble comme un GET action).

Pour toute personne rencontrant autre ce problème, essayez d'envoyer un POST via CURL à votre callback_url, juste pour vérifier qu'il est de retour ce qu'il doit faire:

curl -X POST http://yourcallbackurl.com