You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PHP将Microsoft Graph用户照片接口响应转换为图片

解决Microsoft Graph获取用户照片返回乱码无法显示的问题

我最近在PHP项目里调用Microsoft Graph的https://graph.microsoft.com/v1.0/me/photo/$value接口获取用户照片时,踩了个坑——返回的不是能直接用的内容,而是一堆类似����JFIF``��C的乱码,根本没法正常显示图片。好在社区大佬帮忙,终于把问题解决了,现在把可用的代码和关键思路分享给大家!

问题根源

其实这个接口返回的不是JSON格式数据,而是二进制的图片文件内容。如果直接把它当文本处理或者输出,就会变成你看到的乱码。核心是要正确处理响应的内容类型,把二进制数据按图片格式输出给浏览器。

可用代码示例

<?php
// 替换成你通过身份验证获取到的有效Access Token
$accessToken = 'your-valid-access-token-here';

$graphPhotoUrl = 'https://graph.microsoft.com/v1.0/me/photo/$value';

// 初始化CURL请求
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $graphPhotoUrl);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
// 设置请求头,带上授权令牌,同时指定接受图片格式
curl_setopt($curl, CURLOPT_HTTPHEADER, [
    'Authorization: Bearer ' . $accessToken,
    'Accept: image/jpeg'
]);

// 执行请求并获取响应
$imageBinary = curl_exec($curl);
$responseCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);

// 处理响应
if ($responseCode === 200) {
    // 告诉浏览器这是一张JPEG图片
    header('Content-Type: image/jpeg');
    // 直接输出二进制图片数据
    echo $imageBinary;
} else {
    // 错误处理,根据实际需求调整
    echo "获取用户照片失败,HTTP状态码: {$responseCode}";
}
?>

关键注意点

  • 请求头设置:一定要带上Accept: image/jpeg(或者你需要的图片格式,比如image/png),明确告诉Graph接口我们需要返回图片数据
  • 响应处理:拿到二进制数据后,先设置Content-Type响应头为对应的图片类型,再直接输出二进制内容,不能做任何文本转码操作
  • 状态码校验:记得检查HTTP响应码,200表示成功,其他码比如401是授权问题,404是用户没有上传照片,需要针对性处理

内容的提问来源于stack exchange,提问作者Tim Vanden Hende

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:39:56