Для параметра CURLOPT_POSTFIELDS
параметры могут быть переданы как строка с urlencoded, например para1=val1¶2=val2&..
, или как массив с именем поля в качестве ключа и данными поля как значение
Попробуйте следующий формат:
$data = json_encode(array(
"first" => "John",
"last" => "Smith"
));
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$output = curl_exec($ch);
curl_close($ch);