CURL / GuzzleHttp和PUT(ting)PHP中的json有效负载

时间:2017-06-30 13:16:51

标签: php curl

我正在尝试为jet.com提供json有效负载,但我每次都收到NULL作为响应,我不确定我做错了什么。

我创建了一个如下所示的json有效负载:

{
  "alt_order_id": "12345",
  "shipments": [
    {
      "alt_shipment_id": "11223344",
      "shipment_tracking_number": "1Z12342452342",
      "response_shipment_date": "2014-06-11T18:00:00.0000000-04:00",
      "response_shipment_method": "ups_ground",
      "expected_delivery_date": "2014-06-11T18:00:00.0000000-04:00",
      "ship_from_zip_code": "12061",
      "carrier_pick_up_date": "2014-06-11T18:00:00.0000000-04:00",
      "carrier": "UPS",
      "shipment_items": [
        {
          "alt_shipment_item_id": "129900120",
          "merchant_sku": "15a1010",
          "response_shipment_sku_quantity": 1
        }
      ]
    }
  ]
}

我首先尝试过GuzzleHttp但是无法弄清楚要使用什么作为有效载荷的关键并且不断出错,所以我选择尝试使用cURL。

我创造了这个:

$ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, 'https://merchant-api.jet.com/api/orders/'.$order_id.'/shipped');
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
        curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
        curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
        curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
        $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        dd($ch);
        $res = curl_exec($ch);

但是我继续回到null,因为响应和项目没有更新。当我死去并转储时,我得到了这个:

curl resource @290 ▼
  url: "https://merchant-api.jet.com/api/orders/000000000/shipped"
  content_type: null
  http_code: 0
  header_size: 0
  request_size: 0
  filetime: 0
  ssl_verify_result: 0
  redirect_count: 0
  total_time: 0.0
  namelookup_time: 0.0
  connect_time: 0.0
  pretransfer_time: 0.0
  size_upload: 0.0
  size_download: 0.0
  speed_download: 0.0
  speed_upload: 0.0
  download_content_length: -1.0
  upload_content_length: -1.0
  starttransfer_time: 0.0
  redirect_time: 0.0
  redirect_url: ""
  primary_ip: ""
  certinfo: []
  primary_port: 0
  local_ip: ""
  local_port: 0
}

关于我做错的任何想法?我知道我的OAuth密钥正在工作,因为我能够在标头中传递数据。谢谢,如果有什么明显的话,请告诉我。我是cURL的新手。

1 个答案:

答案 0 :(得分:1)

使用guzzle时,json数据作为传递guzzle请求方法的$ options数组的一部分传入。

一个例子:

<?php

$options = array(
    'json' => array(
        'data' => 'value',
        'more' => 'data'
    ),
);

$guzzle->request("POST", "http://some.api/putJson", $options);

选项数组中存储在'json'键下的所有数据都将在请求中传递。

希望这有帮助

编辑:PUT请求

PUT请求不应使用“ json ”选项键发送数据,而应使用“正文”键。

示例PUT请求:

<?php

$options = array(
    'body' => array(
        'data' => 'value',
        'more' => 'data'
    ),
);

$guzzle->request("PUT", "http://some.api/putJson", $options);