简体   繁体   English

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

[英]Posting JSON in Ruby with HTTParty Returns invalid_request

It seems that my post is reaching the host, however it may be formatted incorrectly? 看来我的帖子正在到达主持人,但是它的格式可能不正确? Not coming in as JSON? 不以JSON的形式出现?

The host's result is presenting me with an error Code: invalid_request Message: Validation failed on the request. 主机的结果向我显示错误代码: invalid_request 消息:对请求的验证失败。

Host Docs: 主机文件:

This means that Automatic Ordering didn't have enough information to place the order. 这意味着自动订购没有足够的信息来下订单。 This almost always occurs because you haven't fully filled out your Amazon account information on your Automatic Ordering section. 这几乎总是发生,因为您还没有在“自动订购”部分中完全填写您的Amazon帐户信息。

My error result includes the following: 我的错误结果包括以下内容:

{
  "_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"
}

My code is in the index view as: 我的代码在索引视图中为:

<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>

According to Zinc Docs you should send json object in body but you are sending json array. 根据Zinc Docs,您应该在正文中发送json对象,但是要发送json数组。 To send JSON Object, you should start your body with curly braces "{}" and not square brackets "[]" 要发送JSON对象,您应该以大括号“ {}”而不是方括号“ []”开头

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM