使用cURL向API发送JSON请求

时间:2015-12-06 03:10:53

标签: php json curl

我见过人们在数组中发送JSON数据的例子。使用cURL发送数据。问题是大多数都像是

    $data = array('first_name' => 'Thomas', 'last_name' => 'Woods')

我的问题是,如果我有类似下面的东西,不像干切。例如:

    "products": [
{
  "product_id": "B00I9KDFK0",
  "quantity": 1,
  "seller_selection_criteria": [
    {
      "condition_in": ["New"],
      "international": false,
      "handling_days_max": 5
    }
  ]
}

],

那么我该如何将这些信息放入数组?

更多信息:我试过以下没有运气

    <?php
    // Your ID and token


    // The data to send to the API
    $postData = array(
        'client_token' => 'XXXXXXXXXXXXXXXXXXXXXX',
        'retailer' => 'amazon',
        'products' => array('product_id' => '0923568964', 'quantity' => '1',                       'seller_selection_criteria' => array('condition_in' => 'New', 'international' =>         'false', 'handling_days_max' => '5')),
        'max_price' => '1300',
        'shipping_address' => array('first_name' => 'Thomas', 'last_name' =>             'XXXXX', 'address_line1' => 'XXXXXX Loop', 'address_line2' => '', 'zip_code' =>         'XXXXX', 'city' => 'XXXX', 'state' => 'MS', 'country' => 'US', 'phone_number' =>         'XXXXXX'),
'is_gift' => 'false',
'gift_message' => "",
'shipping_method' => 'cheapest',
'payment_method' => array('name_on_card' => 'XXXXXXXX', 'number' => 'XXXXXXXXXXXX', 'security_code' => 'XXX', 'expiration_month' => 'XX', 'expiration_year' => 'XXXX', 'use_gift' => 'false'),
'billing_address' => array('first_name' => 'Thomas', 'last_name' => 'XXXXXX', 'address_line1' => 'XXXXXXXXX', 'address_line2' => '', 'zip_code' => 'XXXXXX', 'city' => 'XXXXXXXX', 'state' => 'MS', 'country' => 'US', 'phone_number' => 'XXXXXXXX'),
'retailer_credentials' => array('email' => 'XXXXXXXX', 'password' =>         'XXXXXXXXX')
    );

    // Setup cURL
    $ch = curl_init('https://api.zinc.io/v0/order');
    curl_setopt_array($ch, array(
CURLOPT_POST => TRUE,
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_POSTFIELDS => json_encode($postData)
    ));

    // Send the request
    $response = curl_exec($ch);

    // Check for errors
            if($response === FALSE){
        die(curl_error($ch));
    }

    // Decode the response
    $responseData = json_decode($response, TRUE);

    // Print the date from the response
    echo $responseData['published'];
    echo $response;
    ?>

我得到的错误是:

    {"_type":"error","_request_id":"5663c16b75f682d920000758","code":"invalid_request","message":"Validation failed on the request.","data":{"validator_errors":[{"value":[],"path":"products","message":"'' is not a permitted value for 'products' field."}]},"host":"zincapi-5","offers_urls":[],"screenshot_urls":[],"_created_at":"2015-12-06T05:02:35.567Z"}

以下是Json_echo Echo的代码

    {"client_token":"xxxxxxxxxxxxxxxxxxxxxxx","retailer":"amazon","products":{"product_id":"0923568964","quantity":1,"seller_selection_criteria":{"condition_in":"New","international":false,"handling_days_max":5}},"max_price":"1300","shipping_address":{"first_name":"Thomas","last_name":"xxxxxx","address_line1":"xxxxx","address_line2":"","zip_code":"xxxx","city":"xxxxx","state":"MS","country":"US","phone_number":"xxxxxx"},"is_gift":"false","gift_message":"","shipping_method":"cheapest","payment_method":{"name_on_card":"xxxxxxxxxx","number":"xxxxxxxxxxxxx","security_code":"xxxx","expiration_month":"xx","expiration_year":"xxxx","use_gift":false},"billing_address":{"first_name":"Thomas","last_name":"xxxxx","address_line1":"xxxxxxx","address_line2":"","zip_code":"xxxx","city":"xxxxxx","state":"MS","country":"US","phone_number":"xxxxxx"},"retailer_credentials":{"email":"xxxxxxxxxx","password":"xxxxxxxxxx"}}

1 个答案:

答案 0 :(得分:0)

您应该可以使用json_encode()将其放入格式正确的数组中。

在阅读了您的回复以及您从请求的API返回的错误后,我认为该错误与您的请求格式有关。

如果你查看他们的API文档,你会发现它正在期待一系列产品。您只发送一个,但它需要采用数组格式。 这是它的期望:

"products": [
{
  "product_id": "0923568964",
  "quantity": 1,
  "seller_selection_criteria": [
    {
      "condition_in": ["New"],
      "international": false,
      "handling_days_max": 5
    }
  ]
}

],

因此,要更改此设置,您需要将阵列的产品密钥更新为:

'products' => array(array('product_id' => '0923568964', 'quantity' => '1','seller_selection_criteria' => array('condition_in' => 'New', 'international' =>'false', 'handling_days_max' => '5'))),

如果您注意到,我会在您的产品详细信息数组周围添加一个数组声明。如果您有第二个产品,则在第一批产品详细信息之后添加一个逗号并添加第二个产品。