繁体   English   中英

使用 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.

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