Ich mache meine erste Rails App, die eine Verbindung zu einem alten E-Commerce-Framework für das Ship Hero Warehouse Management System ist.JSON.parse auf eine API-Antwort mehr als einmal?
Ich treffe eine Wand auf ein bestimmtes Problem. Ich habe einen Webhook erstellt und in der ship hero api registriert. Wenn eine Sendung ausgeht, sendet sie Daten an einen Endpunkt, den ich erstellt habe. Ich erhielt die Parameter wie so:
POST Started "/ Schiff" für 54.243.50.75 bei 2016-07-08 15:22:02 -0400
Processing by WebhooksController#shipment as */*
Parameters: {"{\"test\": \"0\", \"fulfillment\": {\"line_items\": "=>{"{\"id\": \"200CB01-606R\", \"quantity\": 1}"=>{", \"shipping_method\": \"UPS Ground\", \"shipping_carrier\": \"UPS\", \"tracking_number\": \"1Z89ER740392038191\", \"custom_tracking_url\": \"http://wwwapps.ups.com/WebTracking/track?track"=>"yes"}}, "trackNums"=>"1Z89ER740392038191\", \"shipping_address\": {\"address_city\": \"Brooklyn\", \"name\": \"XXX\", \"address1\": \"XXX\", \"address2\": \"APT 2A\", \"address_state\": \"NY\", \"address_country\": \"US\", \"address_zip\": \"11222\"}, \"order_number\": \"WS987182\"}}"}
die Controller-Aktion ich habe eingerichtet ist:
def shipment
if request.headers['Content-Type'] == 'application/json'
data = JSON.parse(request.body.read)
x = JSON.parse(request.body.read)["fulfillment"]["order_number"]
y = JSON.parse(request.body.read)["fulfillment"]["tracking_number"]
puts x
puts y
render nothing: true
else
# application/x-www-form-urlencodedw
data = params.as_json
x = JSON.parse(request.body.read)["fulfillment"]["order_number"]
y = JSON.parse(request.body.read)["fulfillment"]["tracking_number"]
puts x
puts y
render nothing: true
end
end
dies auf einen Fehler wirft: JSON :: ParserError: Ein JSON Text muss mindestens zwei Bytes! Aber wenn ich eine der x- oder y-Variablen aus jeder Bedingung entferne, parst sie den korrekten Wert, nach dem ich suche (die Verfolgungsnummer oder die Auftragsnummer). Solange ich nur 1 Wert parse, funktioniert es. Ich verstehe nicht warum. Here ist der Link zur Schiffsheld-Imkerei für die Webhook Shipment URL-Dokumentation. Jede Hilfe würde sehr geschätzt werden.
Ich bekomme tatsächlich einen Fehler damit. NoMethodError (undefinierte Methode '[] 'für nil: NilClass): app/controllers/webhooks_controller.rb: 61: in' sendung' –
Wenn der Fehler im obigen Code ausgelöst wurde, dann sollten Sie überprüfen, ob 'params [" fulfillment "]' ist 'nil', oder Sie können [strong parameters] (http://edgeguides.rubyonrails.org/action_controller_overview.html#strong-parameters) nutzen. 'params.require (: fulfillment)', die sofort eine Antwort * 422 Unprocessable Entity * sendet, wenn "fulfillment" fehlt. – Aetherus