Guzzle:将带有嵌套 JSON 的 POST 发送到 API
Guzzle: Sending POST with Nested JSON to an API
我正在尝试在 PHP (Wordpress CLI) 中使用 Guzzle 命中 POST API 端点来计算运费。该路线需要以下格式的 RAW JSON 数据:
{
"startCountryCode": "CH"
"endCountryCode": "US",
"products": {
"quantity": 1,
"vid": x //Variable ID
}
}
Link 到 API 我正在消费:https://developers.cjdropshipping.com/api2.0/v1/logistic/freightCalculate
$body = [
"endCountryCode" => "US",
"startCountryCode" => "CN",
"products" => [
'vid' => $vid,
'quantity' => 1
],
];
$request = $this->client->request(
'POST', 'https://developers.cjdropshipping.com/api2.0/v1/logistic/freightCalculate',
[
'headers' => [
'CJ-Access-Token' => $this->auth_via_cj(), // unnecessary, no auth required. Ignore this header
],
'body' => json_encode( $body )
],
);
我也试过使用 'json' => $body 而不是 'body' 参数。
我收到 400 Bad Request 错误。
有什么想法吗?
您不需要将数据转换为 json 格式,Guzzle 会处理。
您也可以使用 Guzzle 库的 post() 方法来实现相同的请求结果。这是一个例子...
$client = new Client();
$params['headers'] = ['Content-Type' => 'application/json'];
$params['json'] = array("endCountryCode" => "US", "startCountryCode" => "CN", "products" => array("vid" => $vid, "quantity" => 1));
$response = $client->post('https://developers.cjdropshipping.com/api2.0/v1/logistic/freightCalculate', $params);
试试这样给body
"json" => json_encode($body)
我在这上面花了很多时间才意识到产品实际上需要对象数组。我一直在发送一个 one-dimensional 数组,这导致了 'Bad Request' 错误。
为了解决这个问题,只需将 'vid' 和 'quantity' 封装到一个数组中,瞧!
我正在尝试在 PHP (Wordpress CLI) 中使用 Guzzle 命中 POST API 端点来计算运费。该路线需要以下格式的 RAW JSON 数据:
{
"startCountryCode": "CH"
"endCountryCode": "US",
"products": {
"quantity": 1,
"vid": x //Variable ID
}
}
Link 到 API 我正在消费:https://developers.cjdropshipping.com/api2.0/v1/logistic/freightCalculate
$body = [
"endCountryCode" => "US",
"startCountryCode" => "CN",
"products" => [
'vid' => $vid,
'quantity' => 1
],
];
$request = $this->client->request(
'POST', 'https://developers.cjdropshipping.com/api2.0/v1/logistic/freightCalculate',
[
'headers' => [
'CJ-Access-Token' => $this->auth_via_cj(), // unnecessary, no auth required. Ignore this header
],
'body' => json_encode( $body )
],
);
我也试过使用 'json' => $body 而不是 'body' 参数。
我收到 400 Bad Request 错误。
有什么想法吗?
您不需要将数据转换为 json 格式,Guzzle 会处理。 您也可以使用 Guzzle 库的 post() 方法来实现相同的请求结果。这是一个例子...
$client = new Client();
$params['headers'] = ['Content-Type' => 'application/json'];
$params['json'] = array("endCountryCode" => "US", "startCountryCode" => "CN", "products" => array("vid" => $vid, "quantity" => 1));
$response = $client->post('https://developers.cjdropshipping.com/api2.0/v1/logistic/freightCalculate', $params);
试试这样给body
"json" => json_encode($body)
我在这上面花了很多时间才意识到产品实际上需要对象数组。我一直在发送一个 one-dimensional 数组,这导致了 'Bad Request' 错误。
为了解决这个问题,只需将 'vid' 和 'quantity' 封装到一个数组中,瞧!