-->

API POST with array using HTTP gem (or RestClient)

2019-03-06 09:39发布

问题:

I'm having trouble with this api and can't seem to get over the hump. Using the HTTP gem (though I'm flexible and can use RestClient if that gets me an answer quicker!). Anyway, I'm having trouble posting an array. everything else is good, I just can't figure out this "itemsarray" in the printaura api found here in the addorder method: PrintAura API

I'm running this:

def self.submitorder   
  req = HTTP.post("https://api.printaura.com/api.php", :json => { 
        :key => APIKEY, 
        :hash => APIHASH, 
        :method => "addorder",
        :businessname => "this is a secret too",
        :businesscontact => "thats a secret",
        :email => "my@email.com",
        :your_order_id => "1",
        :returnlabel => "FakeAddress",
        :clientname => "ShippingName",
        :address1 => "ShippingAddressLine1",
        :address2 => "ShippingAddressLine2",
        :city => "ShippingCity",
        :state => "ShippingState",
        :zip => "ShippingZip",
        :country => "US",
        :customerphone => "dontcallme",
        :shipping_id => "1",
        :itemsarray => {:item => [ 
            :product_id => 423,
            :brand_id => 33,
            :color_id => 498,
            :size_id => 4,
            :front_print => 1389517,
            :front_mockup => 1390615,
            :quantity => 1
          ]}

    })

  puts JSON.parse(req)




end

And my output is this:

{"status"=>false, "error_code"=>19, "result"=>19, "message"=>"You cannot place an order without items, Please fill the items array with all the required information. Full API documentation can be found at https:/www.printaura.com/api/"}

Gosh, if someone could look at that and help me out I would forever appreciate it.

回答1:

def self.submitorder 
  itemsarray = { :items => [ { :product_id => 423, :brand_id => 33, :color_id => 498, :size_id => 4, :quantity => 1, :front_print => 1389517,
        :front_mockup => 1390617 } ] }
  req = HTTP.post("https://api.printaura.com/api.php", :json => { 
    :key => APIKEY, 
    :hash => APIHASH, 
    :method => "addorder",
    :businessname => "this is a secret too",
    :businesscontact => "thats a secret",
    :email => "my@email.com",
    :your_order_id => "1",
    :returnlabel => "FakeAddress",
    :clientname => "ShippingName",
    :address1 => "ShippingAddressLine1",
    :address2 => "ShippingAddressLine2",
    :city => "ShippingCity",
    :state => "ShippingState",
    :zip => "ShippingZip",
    :country => "US",
    :customerphone => "dontcallme",
    :shipping_id => "1",
    :items =>  Base64.encode64(itemsarray.to_json)}
)

  puts JSON.parse(req)

I really hopes this helps somebody some years from now haha



回答2:

To create a array in JSON you use an array in Ruby. Its that easy.

require 'json'

def self.submitorder   
  req = HTTP.post("https://api.printaura.com/api.php", :json => { 
        :key => APIKEY, 
        :hash => APIHASH, 
        :method => "addorder",
        :businessname => "this is a secret too",
        :businesscontact => "thats a secret",
        :email => "my@email.com",
        :your_order_id => "1",
        :returnlabel => "FakeAddress",
        :clientname => "ShippingName",
        :address1 => "ShippingAddressLine1",
        :address2 => "ShippingAddressLine2",
        :city => "ShippingCity",
        :state => "ShippingState",
        :zip => "ShippingZip",
        :country => "US",
        :customerphone => "dontcallme",
        :shipping_id => "1",
        :items => [ 
           {
             :product_id => 423,
             :brand_id => 33,
             :color_id => 498,
             :size_id => 4,
             :front_print => 1389517,
             :front_mockup => 1390615,
             :quantity => 1
           }
        ]
    })

  puts JSON.parse(req)

The API lists a items parameter which should contain an array of objects. It says nothing about itemsarray.