Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 400错误请求:can';I don’我想不出请求的问题_Php_Microsoft Graph Api - Fatal编程技术网

Php 400错误请求:can';I don’我想不出请求的问题

Php 400错误请求:can';I don’我想不出请求的问题,php,microsoft-graph-api,Php,Microsoft Graph Api,我必须使用prestashop读取OneDrive工作表中的文件。 我无法将microsoft/microsoft graph数据包与composer一起使用,因为它需要guzzle v6,并且prestashop被锁定在v5,所以我自己正在操纵请求,但似乎我遗漏了一些东西 我得到了凭证,我有我的访问令牌(没有它或随机字符串给我一个401错误) 现在我正在尝试读取一个文件,但更简单的是,我无法列出驱动器中最近的文件。 我可以在graph explorer(Being connected)上完成,

我必须使用prestashop读取OneDrive工作表中的文件。 我无法将microsoft/microsoft graph数据包与composer一起使用,因为它需要guzzle v6,并且prestashop被锁定在v5,所以我自己正在操纵请求,但似乎我遗漏了一些东西

我得到了凭证,我有我的访问令牌(没有它或随机字符串给我一个401错误)

现在我正在尝试读取一个文件,但更简单的是,我无法列出驱动器中最近的文件。 我可以在graph explorer(Being connected)上完成,并做任何我想做的事情,但在代码中,我总是得到一个“400错误错误错误请求”,没有其他细节

这是我的密码,如果你能给我指出正确的方向

$url='1!'https://graph.microsoft.com/v1.0/me/drive/recent';
$req=$guzzle->get($url[
“标题”=>[
“用户代理”=>“Mozilla/5.0(Windows;U;Windows NT 6.1;en-US)AppleWebKit/533.2(KHTML,类似Gecko)Chrome/5.0.342.3 Safari/533.2”,
'接受'=>'应用程序/json,text/plain,*/*',
'授权'=>'承载'$accessToken,
],
“正文”=>[
],
]);
编辑:

问题似乎与授权有关,以下是代码:


您最有可能通过流获取访问令牌(应用程序权限令牌),在这种情况下,没有上下文,因为它表示在用户上下文中签名(仅适用于)

对于应用程序权限令牌,需要明确指定用户,例如:

调用至少
文件.Read.All
站点.Read.All
权限级别是必需的

一旦授予并同意如下所示的权限

角色
声明应包含以下权限列表:

"roles": [
    "Sites.Read.All",
    "Files.Read.All"
  ]


相关:-您可能称之为错误或向其传递错误的数据。@Script47是的,我知道,问题是我无法找出错误或缺失的内容。。。第一次使用microsoft graph。请尝试在此处完全省略
正文部分。@misorude不幸的是,我已经尝试过了,错误仍然是一样的。尝试只发送授权标头。好的,谢谢,我会尝试(我需要和管理员授予访问权限)。我获得了管理员的许可,但无法获得访问权限,我现在有一个403禁区,我叫它进步!我不了解访问配置。首先,我使用grant\u type=client\u凭据获取令牌。然后我打电话得到403。如果我正确理解@vadim,我需要更改凭证请求吗?或者首先我得到了acesstoken,然后打电话请求授予我访问该令牌的权限?@RomailEmercier,答案已经更新(演示了需要什么权限以及如何验证访问令牌)很抱歉打电话给你,但你似乎知道你的东西,而我真的不知道,我搜索或阅读文档越多,我就越迷路。。。
$userId = "<username>@<tenant>.onmicrosoft.com";
$url = 'https://graph.microsoft.com/v1.0/users/' . $userId . '/drive/recent';
$guzzle = new Client();
$headers = ['Authorization'=>'Bearer ' . $accessToken];
$response = $guzzle->get($url,['headers' => $headers]);
$json = json_decode($response->getBody()->getContents(),true);
function getAccessToken($tenantId, $clientId, $clientSecret){
    $guzzle = new Client();
    $url = 'https://login.microsoftonline.com/' . $tenantId . '/oauth2/token?api-version=1.0';
    $token = json_decode($guzzle->post($url, [
        'form_params' => [
            'client_id' => $clientId,
            'client_secret' => $clientSecret,
            'resource' => 'https://graph.microsoft.com/',
            'grant_type' => 'client_credentials'
        ],
    ])->getBody()->getContents());
    return $token->access_token;
}