我使用laravel和Microsoft-graph API。
我需要获取用户的照片,但有些人还没有照片,对于他们来说,api返回了一个错误404错误,该错误导致了我的页面被封锁。我不想要的是为没有照片的用户添加默认的个人资料照片,但我不知道如何传递404错误。
我的代码在做什么:
$photoLink = '/users\/' . $value['email'] . '/photos/240x240';
$photo = $graph->createRequest('GET', $photoLink . '/$value')->execute();
$photo = $photo->getRawBody();
$meta = $graph->createRequest("GET", $photoLink)->execute();
$meta = $meta->getBody();
echo '<img src="data:'.$meta["@odata.mediaContentType"].';base64,'.base64_encode($photo).'" />';
错误代码:
消息“客户端错误:GET https://graph.microsoft.com/v1.0/users/XXX@XXX.com/photos/240x240/$value
引发的GuzzleHttp \ Exception \ ClientException导致了404 Not Found
响应:
{
“错误”:{
“ code”:“ ErrorItemNotFound”,
“ message”:“找不到照片。”,
“ innerError”:{
(被截断...)
“
答案 0 :(得分:2)
我对这个api不熟悉,但看来您正在尝试实现that。
我可以从Microsoft graphql测试中看到,他们在getting back a 404 error时抛出了GraphException
。
以下方法可以解决您的问题:
use GuzzleHttp\Exception\ClientException;
try {
$photoLink = '/users\/' . $value['email'] . '/photos/240x240';
$photo = $graph->createRequest('GET', $photoLink . '/$value')->execute();
$photo = $photo->getRawBody();
$meta = $graph->createRequest("GET", $photoLink)->execute();
$meta = $meta->getBody();
echo '<img src="data:'.$meta["@odata.mediaContentType"].';base64,'.base64_encode($photo).'" />';
} catch (ClientException $e) {
if ($e->getStatusCode() === '404') {
echo '<img src="MYDEFAULTIMAGEURL" />';
}
}
编辑:代码已更新