【问题标题】:How to fix 404 error when users haven't photo?当用户没有照片时如何解决 404 错误?
【发布时间】:2019-09-23 15:37:46
【问题描述】:

我使用 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).'" />';

错误代码: GuzzleHttp\Exception\ClientException 抛出消息“客户端错误:GET https://graph.microsoft.com/v1.0/users/XXX@XXX.com/photos/240x240/$value 导致404 Not Found 响应: { “错误”: { "code": "ErrorItemNotFound", "message": "找不到照片。", “内部错误”:{ (截断...) "

【问题讨论】:

  • edit 提出您的问题,并附上您尝试过但对您不起作用的内容。

标签: php laravel rest microsoft-graph-api


【解决方案1】:

我不熟悉这个 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" />';
    }
}

编辑:代码已更新

【讨论】:

  • 能否请您更新您的帖子中的错误消息?
  • 更新了我的答案,应该可以完成这项工作(我这边无法测试)
  • 感谢它的工作,当用户没有照片时我没有收到任何错误,还有一个问题是函数 getStatusCode() 未定义,但当我删除 if 时它工作。
  • Guzzle 版本中可能不提供 getStatusCode()
猜你喜欢
  • 2013-06-28
  • 1970-01-01
  • 1970-01-01
  • 2018-08-03
  • 2021-07-14
  • 2020-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多