私は船のヒーロー倉庫管理システムへの従来のeコマースフレームワークへのコネクタである私の最初のレールアプリを作っています。APIレスポンスのJSON.parseは複数回ですか?
特定の問題で壁に当たっています。私はwebhookを作成し、それを船のヒーローのapiに登録しました。出荷が終了すると、私は作成したエンドポイントにデータを送信します。
54.243.50.75コントローラのアクション
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\"}}"}
-0400 15時22分02秒2016年7月8日にするためのPOST "/船を" 開始:これは、私はパラメータを受信しました私が設定しているです:JSON :: ParserError:
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
が、これはエラーをスローJSONテキストは、少なくとも2つのオクテットが含まれている必要があります!しかし、各条件からxまたはy変数のいずれかを削除すると、探している正しい値(追跡番号または注文番号)が解析されます。だから私は1つの値を解析する限り、それは動作します。なぜか分からない。 Hereは、Webhook出荷URLのドキュメントの船主募集査定者へのリンクです。どんな助けでも大歓迎です。
実際にこれでエラーが発生しています。 NoMethodError(未定義メソッド '[] 'for nil:NilClass): app/controllers/webhooks_controller.rb:61:'出荷' –
上記のコードでエラーが発生した場合、 'params [" fulfillment "]'が 'nil'であるか、[強力なパラメータ](http://edgeguides.rubyonrails.org/action_controller_overview.html#strong-parameters)を利用できます。 'params.require(:fulfillment)'は、 '' fulfillment ''が見つからない場合に即座に* 422 Unprocessable Entity *レスポンスを送信します。 – Aetherus