用户未拍照时如何修复404错误?

时间:2019-09-23 15:37:46

标签: php laravel rest microsoft-graph

我使用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”:{       (被截断...) “

1 个答案:

答案 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" />';
    }
}

编辑:代码已更新