Php 如何使用POST在CURL请求中传递JSON

Php 如何使用POST在CURL请求中传递JSON,php,php-curl,Php,Php Curl,我有一个JSON字符串,我想通过POST传递给API 当我试图传递数据时,我得到“JSON无效”。我已经使用API的内置测试工具手动测试了JSON字符串,并且知道该字符串可以正常工作。该函数使用GET从API获取数据 我怀疑在使用POST时PHP/curl语法可能是错误的 function curl($url = null,$method = null,$body = null){ $loginauth = base64_encode('SECRETKEY'); if($m

我有一个JSON字符串,我想通过POST传递给API

当我试图传递数据时,我得到“JSON无效”。我已经使用API的内置测试工具手动测试了JSON字符串,并且知道该字符串可以正常工作。该函数使用GET从API获取数据

我怀疑在使用POST时PHP/curl语法可能是错误的

function curl($url = null,$method = null,$body = null){

    $loginauth =  base64_encode('SECRETKEY');

    if($method == null){

        $method = 'GET';
        $headers = array(
            'Accept: application/hal+json,application/vnd.error+json',
            'Authorization: Basic '.$loginauth
        );

    }else{

        $method = 'POST';
        $headers = array(
            'Content-Type: application/json',
            'Authorization: Basic '.$loginauth
        );
    }

    if($url == null){
        $url = 'https://coolapi.com/api/v1/companies';
    }

    if($body == null){
        $body = '';
    }

    $curl = curl_init();
    curl_setopt_array($curl, array(
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_SSL_VERIFYHOST => false,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_URL => $url,
        CURLOPT_CUSTOMREQUEST => $method,
        CURLOPT_HTTPHEADER => $headers,
        CURLOPT_POSTFIELDS => $body
    ));

    $response = curl_exec($curl);
    $err = curl_error($curl);
    curl_close($curl);

    if($err){
        return $err;
    }else{
        return json_decode($response);
    }
}
我的函数调用:

$url = 'https://one-url';
$data = '{
  "date": "2017-02-22",
  "identifier": "1337",
  "lines": [
    {
      "test": "this is a test",
    }
  ],
  "name": "Wolf"
}';


$register_sale = curl(
    $url,
    'POST',
    $data
);

在PHP中,如果在数据中传递json,则没有预定义的数据类型作为json;PHP会将其视为字符串。因此,使用
json\u encode
声明数组并将其转换为json,它就可以工作了

试试看

$data = [
  "date"=> "2017-02-22",
  "identifier" => "1337",
  "lines" => [  "test" => "this is a test" ],
  "name"=> "Wolf"
];
$json = json_encode($data);

$register_sale = curl($url,'POST', $json);

参考:

curlMe函数在哪里?现在已重命名函数。仍然得到:错误的JSON。位置:1:1,路径:''现在它没有给出无效的JSON…错误的JSON…JSON中需要的一些值可能是u未发送代码中的字符串im测试与使用api的测试工具进行的im测试是相同的,这就是为什么我觉得奇怪的原因。整天都在搜索我自己:(