2017-02-22 88 views
0

我有一个JSON字符串,我想使用POST将它传递给API。如何使用POST在CURL请求中传递JSON

当我尝试传递数据时,我得到“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 
); 
+0

哪里是curlMe功能? – Naincy

+0

立即重命名功能。 – sdfgg45

回答

1

在PHP中,没有预先定义的数据类型为JSON,如果你传递JSON数据; PHP会认为它是字符串。因此,使用json_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); 

参考:https://lornajane.net/posts/2011/posting-json-data-with-php-curl

+0

仍然得到:坏JSON。位置:1:1,路径:'' – sdfgg45

+0

现在它没有给无效的JSON ....坏Json它的东西.... json中需要的一些值可能是你不发送 – Naincy

+0

在代码中测试的字符串是相同的即时通讯测试使用api的testingtool,它的工作原理,这就是为什么我觉得它很奇怪。 – sdfgg45