使用 HTTParty Returns invalid_request 在 Ruby 中发布 JSON

Posting JSON in Ruby with HTTParty Returns invalid_request

我的 post 似乎正在到达主机,但它可能格式不正确?不是 JSON?

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

主机文档:

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.

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

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

根据 Zinc Docs,您应该在正文中发送 json 对象,但您发送的是 json 数组。要发送 JSON 对象,您应该以大括号“{}”而不是方括号“[]”

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