私はmailchimp統合を構築しています、そしてそれらはJSONコードでのPOST呼び出しを必要とします。
いいえ、私は実際にこのコードを使用しています は動作します :
$data = wp_remote_post($url, array(
'headers' => array('Content-Type' => 'application/json; charset=utf-8'),
'body' => json_encode($array_with_parameters),
'method' => 'POST'
));
しかし、それはPHP警告を返します
警告:http_build_query():パラメータ1はArrayまたはObjectであると予想されます。行507の../wp-includes/Requests/Transport/cURL.phpに誤った値が指定されています
それを避ける方法は?
'body'インデックスにプレーン配列を使用しようとしましたが、MailChimpがJSON構文解析エラーを返します。
次のようにリクエストでdata_format
パラメータを設定してみてください。
$data = wp_remote_post($url, array(
'headers' => array('Content-Type' => 'application/json; charset=utf-8'),
'body' => json_encode($array_with_parameters),
'method' => 'POST',
'data_format' => 'body',
));
フォーマットはquery
にデフォルト設定されているように見えますが、その場合WordPressはhttp_build_query
を使用してデータをフォーマットしようとします。これはボディをすでに文字列としてフォーマットしているので問題になります。これがwp-includes/class-http.php
の関連チェックです。
if (!empty($data)) {
$data_format = $options['data_format'];
if ($data_format === 'query') {
$url = self::format_get($url, $data);
$data = '';
}
elseif (!is_string($data)) {
$data = http_build_query($data, null, '&');
}
}
あなたのエラーはwp-includes/Requests/Transport/cURL.php
の507行目から来ているので、これがhttp_build_query
へのルート呼び出しであることがわかります:
protected static function format_get($url, $data) {
if (!empty($data)) {
$url_parts = parse_url($url);
if (empty($url_parts['query'])) {
$query = $url_parts['query'] = '';
}
else {
$query = $url_parts['query'];
}
$query .= '&' . http_build_query($data, null, '&');
$query = trim($query, '&');
if (empty($url_parts['query'])) {
$url .= '?' . $query;
}
else {
$url = str_replace($url_parts['query'], $query, $url);
}
}
return $url;
}