[英]How to create a folder without an error using Microsoft Graph API?
[英]create folder with microsoft graph api
我正在尝试使用微软图形 API 创建文件夹。 在 microsoft graph explorer 中,一切正常,但我的 php 代码返回错误:
$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);
这是 '$out' 的响应: 400 BadRequest,无法读取 JSON 请求负载。 请确保已设置 Content-Type 标头且有效负载为有效的 JSON 格式。 我不明白,怎么了? json 数据是正确的,标题也是..
微软图形 API 文档显示了这个创建文件夹的示例请求:
POST /me/drive/root/children
Content-Type: application/json
{
"name": "New Folder",
"folder": { },
"@microsoft.graph.conflictBehavior": "rename"
}
要获得请求的这一部分: "folder": { }
您可以将"folder" => new stdClass()
放入您的 $data 数组或保留此"folder" => array()
并使用json_encode($data, JSON_FORCE_OBJECT)
。 如果您使用 JSON_FORCE_OBJECT,所有数组都将被编码为对象。 我遇到了同样的问题,但响应中的错误有点不同:有效负载中的属性文件夹具有与 schema 不匹配的值。 我正在使用"folder" => new stdClass()
并且它工作正常。
正确的方法是使用“json_encode()”以正确的格式放置数据。 文件夹的正确格式是$folderParameters = ["name" => $name, "folder" => ["childCount" => '0']];
(感谢使用 API 在 OneDrive 上创建文件夹)
正确的代码是:
$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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.