1

新しいBasecampApiを介して既存のBasecampプロジェクトを編集しようとしています。このエラーが発生しました:

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 (user@example.com)");
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);



?>

私はただ愚かなことをしていると確信していますが、どんな助けでもありがたいです。

ありがとう!

私が今持っているものを更新します:

$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     (user@example.com)');
    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>
4

1 に答える 1

1

BasecampAPI は JSON データのみを受け入れます。ここで-dパラメーターを確認できます -

curl -u username:password \
  -H 'Content-Type: application/json' \
  -H 'User-Agent: MyApp (yourname@example.com)' \
  -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))                                                                       
);                 
于 2013-03-20T10:10:03.737 に答える