使用HTTParty在Ruby中发布JSON返回invalid_request

时间:2015-10-18 18:18:54

标签: ruby-on-rails ruby json httparty

我的帖子似乎已到达主机,但是可能格式不正确?不是以JSON身份出现的?

主持人的结果显示错误代码: invalid_request 消息:请求验证失败。

主持人文档:

  

这意味着自动订购没有足够的信息   下订单。这几乎总是发生,因为你没有完全   在您的自动订购中填写您的亚马逊帐户信息   部分。

我的错误结果包括以下内容:

{
  "_type": "error",
  "_request_id": "5623dcc59ca1bb1e76000a9f",
  "code": "invalid_request",
  "message": "Validation failed on the request.",
  "data": {
    "validator_errors": [
      {
        "path": "retailer_credentials.password",
        "message": "'undefined' is not a permitted value for 'retailer_credentials.password' field."
      },
      {
        "path": "retailer_credentials.email",
        "message": "'undefined' is not a permitted value for 'retailer_credentials.email' field."
      },
      {
        "path": "shipping_method",
        "message": "'undefined' is not a permitted value for 'shipping_method' field."
      },
      {
        "path": "is_gift",
        "message": "'undefined' is not a permitted value for 'is_gift' field."
      },
      {
        "path": "shipping_address.phone_number",
        "message": "'undefined' is not a permitted value for 'shipping_address.phone_number' field."
      },
      {
        "path": "shipping_address.country",
        "message": "'undefined' is not a permitted value for 'shipping_address.country' field."
      },
      {
        "path": "shipping_address.city",
        "message": "'undefined' is not a permitted value for 'shipping_address.city' field."
      },
      {
        "path": "shipping_address.zip_code",
        "message": "'undefined' is not a permitted value for 'shipping_address.zip_code' field."
      },
      {
        "path": "shipping_address.address_line1",
        "message": "'undefined' is not a permitted value for 'shipping_address.address_line1' field."
      },
      {
        "path": "shipping_address.last_name",
        "message": "'undefined' is not a permitted value for 'shipping_address.last_name' field."
      },
      {
        "path": "shipping_address.first_name",
        "message": "'undefined' is not a permitted value for 'shipping_address.first_name' field."
      },
      {
        "path": "retailer",
        "message": "'undefined' is not a permitted value for 'retailer' field."
      },
      {
        "path": "client_token",
        "message": "'undefined' is not a permitted value for 'client_token' field."
      },
      {
        "value": [],
        "path": "products",
        "message": "'' is not a permitted value for 'products' field."
      }
    ]
  },
  "host": "zincapi-1",
  "offers_urls": [],
  "screenshot_urls": [],
  "_created_at": "2015-10-18T17:54:13.416Z"
}

我的代码在索引视图中显示为:

<table>
  <thead>
    <tr>
      <th>IF name</th>
      <th colspan="3"></th>
    </tr>
  </thead>

  <tbody>
<% @ifs.each do |t| %>

<!-- Update Each cur_count -->

  <%
  require 'json'
  require 'HTTParty'


  zincUrl = 'https://api.zinc.io/v0/order'
  @ZincResult=HTTParty.post(zincUrl,
    :body => [{
      :client_token => "XXXXXXXX",
  :retailer => "amazon",
  :products => [{"product_id" => ""+t.item+"", "quantity" => 1,
  "seller_selection_criteria" => [
      {
        "condition_in" => ["New"],
        "international" => false,
        "max_shipping_days" => 10
      }
    ]
    }],
  :max_price => 2000,
  :shipping_address => {
  "first_name" => "name",
  "last_name" => "name",
  "address_line1" => "address",
  "address_line2" => "",
  "zip_code" => "94133",
  "city" => "San Francisco",
  "state" => "CA",
  "country" => "US",
  "phone_number" => "number"
  },
  :is_gift => true,
  :gift_message => "present",
  :shipping_method => "cheapest",
  :payment_method => {
  "name_on_card" => "name",
  "number" => "XXXXXXXX",
  "security_code" => "XXX",
  "expiration_month" => "XX",
  "expiration_year" => "XXXX",
  "use_gift" => false
  },
  :billing_address => {
  "first_name" => "name",
  "last_name" => "name",
  "address_line1" => "address",
  "address_line2" => "",
  "zip_code" => "94133",
  "city" => "San Francisco",
  "state" => "CA",
  "country" => "US",
  "phone_number" => "XXXXXXXX"
  },
  :retailer_credentials => {
  "email" => "email",
  "password" => "password"
  },
  :webhooks => {
  "order_placed" => "http://mywebsite.com/zinc/order_placed",
  "order_failed" => "http://mywebsite.com/zinc/order_failed",
  "tracking_obtained" => "http://mywebsite.com/zinc/tracking_obtained"
  },
  :client_notes => {
  "our_internal_order_id" => "Order_"+t.item+"",
  }
  }].to_json,

    :headers => { 'Content-Type' => 'application/json' } )

  %>

  <%puts "end of Zinc if loop"%>

  <%puts @ZincResult%>

<tr>
  <td><%= t.name %>  </td>
  <td><%= t.item %></td>
  <td><%= t.key %></td>
  <td><%= t.count %></td>
  <td><%= t.cur_count %></td>

  <td><%= link_to 'show', if_path(t) %></td>

  <td><%= link_to 'edit', edit_if_path(t.id) %></td>

  <td><%= link_to 'delete', ifs_delete_path(:id =>t.id)%></td>

</tr>
<% end %>
</tbody>
</table>

1 个答案:

答案 0 :(得分:1)

根据Zinc Docs,您应该在正文中发送json对象,但是您正在发送json数组。要发送JSON对象,你应该用大括号开始你的身体&#34; {}&#34;而不是方括号&#34; []&#34;

@ZincResult=HTTParty.post(zincUrl,
    :body => {.........}.to_json,
    :headers => { 'Content-Type' => 'application/json' } )