简体   繁体   中英

create folder with microsoft graph api

I'm try to create folder, using microsoft graph API. In microsoft graph explorer, all work fine, but my php code return an error:

$name = 'newFolder'; $access_token = '123..';
$link = 'https://graph.microsoft.com/v1.0/me/drive/root/children';

$data = array(
    "name" => $name,
    "folder" => array()
);

$curl=curl_init();
curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
curl_setopt($curl,CURLOPT_URL,$link);
curl_setopt($curl,CURLOPT_CUSTOMREQUEST,'POST');
curl_setopt($curl,CURLOPT_HEADER,false);
curl_setopt($curl,CURLOPT_HTTPHEADER, array('Authorization: Bearer '.$access_token, 'Content-Type: application/json'));
curl_setopt($curl,CURLOPT_POSTFIELDS, $data);
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,0);
curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,0);

$out = curl_exec($curl);
$codeCurl = curl_getinfo($curl,CURLINFO_HTTP_CODE);
curl_close($curl);

this is response of '$out': 400 BadRequest, Unable to read JSON request payload. Please ensure Content-Type header is set and payload is of valid JSON format . I'm can't understand, what wrong? json data is correct, headers too..

The microsoft graph API documentation shows this example request for create folder:

POST /me/drive/root/children
Content-Type: application/json

{
  "name": "New Folder",
  "folder": { },
  "@microsoft.graph.conflictBehavior": "rename"
}

To get this part of the request : "folder": { } you could either put "folder" => new stdClass() in your $data array or keep this "folder" => array() and use json_encode($data, JSON_FORCE_OBJECT) . If you use JSON_FORCE_OBJECT, all arrays will be encoded as objects. I had the same problem, but error in the response was a bit different: Property folder in payload has a value that does not match schema . I am using "folder" => new stdClass() and it works fine.

The right way is using "json_encode()" to put data in a right format. And correct format for the folder was $folderParameters = ["name" => $name, "folder" => ["childCount" => '0']]; (thank Create folder on OneDrive with API )

The right code is :

$link = 'https://graph.microsoft.com/v1.0/me/drive/root/children';

$data = [
    "name"   => $name,
    "folder" => ["childCount" => '0']
];

$headers = [
    'Authorization: Bearer '.$access_token,
    'Content-Type: application/json'
];

$curl=curl_init(); 
curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
curl_setopt($curl,CURLOPT_URL,$link);
curl_setopt($curl,CURLOPT_CUSTOMREQUEST,'POST');
curl_setopt($curl,CURLOPT_HEADER,false);
curl_setopt($curl,CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl,CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,0);
curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,0);

$out = curl_exec($curl); 
$codeCurl = curl_getinfo($curl,CURLINFO_HTTP_CODE);
curl_close($curl);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM