Php 400错误请求:can';I don’我想不出请求的问题
我必须使用prestashop读取OneDrive工作表中的文件。 我无法将microsoft/microsoft graph数据包与composer一起使用,因为它需要guzzle v6,并且prestashop被锁定在v5,所以我自己正在操纵请求,但似乎我遗漏了一些东西 我得到了凭证,我有我的访问令牌(没有它或随机字符串给我一个401错误) 现在我正在尝试读取一个文件,但更简单的是,我无法列出驱动器中最近的文件。 我可以在graph explorer(Being connected)上完成,并做任何我想做的事情,但在代码中,我总是得到一个“400错误错误错误请求”,没有其他细节 这是我的密码,如果你能给我指出正确的方向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)上完成,
$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;
}