2016-07-09 13 views
0

私は船のヒーロー倉庫管理システムへの従来の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のドキュメントの船主募集査定者へのリンクです。どんな助けでも大歓迎です。

答えて

2

ご自身でリクエストボディを解析する必要はありません。何が必要、すでにRailsのことで準備されている、とあなたはparams

x = params["fulfillment"]["order_number"] 
y = params["fulfillment"]["tracking_number"] 

P.S.を介してそれらにアクセスすることができますrequest.bodyはIOなので、一度だけ読み取ることができます。

+0

実際にこれでエラーが発生しています。 NoMethodError(未定義メソッド '[] 'for nil:NilClass): app/controllers/webhooks_controller.rb:61:'出荷' –

+0

上記のコードでエラーが発生した場合、 'params [" fulfillment "]'が 'nil'であるか、[強力なパラメータ](http://edgeguides.rubyonrails.org/action_controller_overview.html#strong-parameters)を利用できます。 'params.require(:fulfillment)'は、 '' fulfillment ''が見つからない場合に即座に* 422 Unprocessable Entity *レスポンスを送信します。 – Aetherus

関連する問題