2013-03-19 1 views
1

Я пытаюсь редактировать существующий проект Basecamp через новый Basecamp Api. Я получаю эту ошибку:cURL в PHP Basecamp API «PUT»

lexical error: malformed number, a digit is required after the minus sign. ---------------  ---------------6 (right here) ------^ 

Мой код:

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); 
curl_setopt($ch, CURLOPT_URL, 'https://basecamp.com/****/api/v1/projects/****.json'); 
curl_setopt($ch, CURLOPT_USERAGENT, "User-Agent : Holy Grail ([email protected])"); 
curl_setopt($ch, CURLOPT_TIMEOUT, 10); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); 
curl_setopt($ch, CURLOPT_POSTFIELDS, array("name" => "from cURL")); 



$result = curl_exec($ch); 
echo $result; 
curl_close($ch); 


if ($result == false) { 
echo "Fetch failed" ; 
} 
else { 
$obj = json_decode($result, true); 
} 

//var_dump($obj); 



?> 

Я уверен, что я просто делаю что-то глупое, но любая помощь приветствуется.

Спасибо!

UPDATE Что я сейчас:

$username = 'user'; 
$password = 'pass'; 
$data = json_encode(array("name" => "from cURL")); 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); 
curl_setopt($ch, CURLOPT_URL, 'https://basecamp.com/****/api/v1/projects/*****.json'); 
curl_setopt($ch, CURLOPT_TIMEOUT, 10); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password"); 
curl_setopt($ch, CURLOPT_HEADER, 1); 
curl_setopt($ch, CURLOPT_PUT, 1); 
curl_setopt($ch, CURLOPT_USERAGENT, 'User-Agent : Holy Grail  ([email protected])'); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
               'Content-Type :application/json', 
               'Content-Length: ' .strlen($data))); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 





$result = curl_exec($ch); 
echo $result; 
curl_close($ch); 


if ($result == false) { 
echo "Fetch failed" ; 
} 
else { 
$obj = json_decode($result, true); 
} 

//var_dump($obj); 



?> 
</body> 
</html> 

ответ

1

BasecampAPI принимает только данные в формате JSON, вы можете увидеть здесь, в -d параметра -

curl -u username:password \ 
    -H 'Content-Type: application/json' \ 
    -H 'User-Agent: MyApp ([email protected])' \ 
    -d '{ "name": "My new project!" }' \ 
    https://basecamp.com/999999999/api/v1/projects.json 

Так что вы не отправки JSON данные в этой строке -

curl_setopt($ch, CURLOPT_POSTFIELDS, array("name" => "from cURL")); 

Удалить опцию CUSTOMREQUEST и добавить CURLOPT_PUT. Измените код на -

$data_string = json_encode(array("name" => "from cURL")); 
... 

curl_setopt($ch, CURLOPT_HEADER, 1); 
curl_setopt($ch, CURLOPT_PUT, True); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);                 
curl_setopt($ch, CURLOPT_HTTPHEADER, array(                   
    'Content-Type: application/json',                     
    'Content-Length: ' . strlen($data_string))                  
);     
+0

Я получаю '403 Forbidden' Теперь. Я не понимаю, почему. –

+0

Я пользуюсь регистрационными данными владельца учетной записи. Я знаю, что пользователь и пароль имеют разрешения для запроса. –

+0

Попробуйте поместить 'curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, true);' * перед * строкой 'CURLOPT_USERPWD'. Также добавьте 'CURLOPT_HEADER' в' True'. –