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

PHP实现微软登录调用Microsoft Graph API返回UnknownError求助

问题描述

我用PHP开发「Microsoft登录」功能,已成功获取Access Token,但用该令牌调用Microsoft Graph API获取用户信息时返回UnknownError。已在后台配置Microsoft Graph的User.Read权限,相关代码及输出如下:

ms-login.php

<?php
$clientId = 'CLIENT_ID';
$redirectUri = 'REDIRECT_URI';

$authorizationUrl = "https://login.microsoftonline.com/common/oauth2/v2.0/authorize";
$params = [
    'client_id' => $clientId,
    'response_type' => 'code',
    'redirect_uri' => $redirectUri,
    'response_mode' => 'query',
    'scope' => 'openid profile email',
];

$authUrl = $authorizationUrl . '?' . http_build_query($params);
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Log in with Microsoft</title>
</head>
<body>
    <a href="<?php echo htmlspecialchars($authUrl); ?>">Log in with Microsoft</a>
</body>
</html>

ms-callback.php

<?php
if (isset($_GET['code'])) {
    $code = $_GET['code'];

    $tokenUrl = "https://login.microsoftonline.com/common/oauth2/v2.0/token";
    $clientId = 'CLIENT_ID';
    $clientSecret = 'CLIENT_SECRET';
    $redirectUri = 'REDIRECT_URI';

    // 获取Access Token所需参数
    $tokenRequestData = [
        'grant_type' => 'authorization_code',
        'code' => $code,
        'redirect_uri' => $redirectUri,
        'client_id' => $clientId,
        'client_secret' => $clientSecret,
    ];

    // POST请求获取Access Token
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $tokenUrl);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($tokenRequestData));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/x-www-form-urlencoded']);
    $response = curl_exec($ch);

    if (curl_errno($ch)) {
        echo 'Curl error: ' . curl_error($ch);
        exit;
    }

    curl_close($ch);

    $response = json_decode($response, true);
    echo "<pre>";
    print_r($response);
    echo "</pre>";

    if (isset($response['access_token'])) {
        $accessToken = $response['access_token'];

        // 请求用户信息
        $userInfoUrl = "https://graph.microsoft.com/v1.0/me";
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $userInfoUrl);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, [
            'Authorization: Bearer ' . $accessToken,
            'Content-Type: application/json',
        ]);
        $userInfo = curl_exec($ch);

        if (curl_errno($ch)) {
            echo 'Curl error: ' . curl_error($ch);
            exit;
        }

        curl_close($ch);

        $userInfo = json_decode($userInfo, true);
        echo "<pre>";
        print_r($userInfo);
        echo "</pre>";
    } else {
        echo '无法获取令牌';
    }
} else {
    echo '无法获取授权码';
}
?>

输出结果

Array
(
    [token_type] => Bearer
    [scope] => openid profile email
    [expires_in] => 3600
    [ext_expires_in] => 3600
    [access_token] => EwB4A8l6BAAUbDba3x2OMJElkF7gJ4z/VbCPEz0AAQvCEolRPfUPCnWaqvAQ+KjzIcNnstha1m4tlbShSaqeCOrM7W/WQh0m7TL+jEKoHNnM9QtMoh4dWUa5aMWoP/pMqJZzPlIoAAB4P7zp4whnDWcZ/gyOfCrB57JTWBo4u1nNlSOlXjbEa7Aexe3sSPS/4y9BBJem+3AW/WnUs82MV6/H2NTcOzZiJOnPJKarZd4v9hIbra3e1q3gHhhVxNgr7bSY3tzOTTE23M3Li4T00YQMeMylR0vnBShFHXFX50CXv1KOTWp+twvv3eJiVAvJz4k15a4U6GO7KBYeSgU3YkrjrxxYjMlbCmpnb9iEzloeeUR6mHHgzSFSRVFFfFwQZgAAEF7x1mCN+WxysxoGXpS3oP1AAsENw6p+o5QyRKbHz0Js02R8ugwVjHZw8Zcxmd6lRuVNJgy3xIJVIfJuc+F0fxVta4yE22CTDr9haRmjPeyafsCG2s7Zp4FaOmpGTv+AGmpl9/yQyaG/ilYFKArWW7rjoJPquctOjF1aGyOFCXsGlhg2tSbk/zldOV7IuGGrspy1FLVdEuAVfISm3fJYGBWCaoWdou0a3njK5NlQjcKA7PbxQyU+fKTX1p7dQWd+ya3GyyZj3tpivXwyz+cY9kzsfKoI4TrfcuKzW/xhqTroFXbcC7qPW1D2cOdTtrfjt83bI9HR8OqLxaKrnPasFo0UuCkm4GZ4DtxFu+SKuLIQlgSMzdKzRBxIiFzY1NIrdhAanyMdRJxwHii3zpFMscOlrStwmMfYbJKW5KzoI+DrItsmaaFGFx5NyoP8iHTtZ54sJS5aFtMOlQGGjhsJzBYMt3GoV54/FFf0r+Wu//XoJz5G7CzYs3DFEZXfLe69yIQHNkai8SMBPFTBsLBFqmXV2/tgwuqWRnSvDcS69wlAxSLyozCx6YOCAbZBv+KQT39GOCCe0Hd/z+11PUBGQY/ltbm/m2IWs8f31CJjQ/7wz5AJE8If0jGouqbkY97big4EVZH7N+jDIkzfPbYBmHSSm3IWVuXISDohERI9DfewuSosYetXub1aF4xteL1nSdoN1PUrwTjVIom0BOXAIlYhuFAiZ5wNIt+0H+gZY7h5/rMwehgluZiX0Iu+FsR/YwCLB7/eFWri4DYqC2bT5oPM0nwC
    [id_token] => eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6ImRHdEhRTWhHbHRKVUNjSF9TUVc2NG5FVW9ZRSJ9.eyJ2ZXIiOiIyLjAiLCJpc3MiOiJodHRwczovL2xvZ2luLm1pY3Jvc29mdG9ubGluZS5jb20vOTE4ODA0MGQtNmM2Ny00YzViLWIxMTItMzZhMzA0YjY2ZGFkL3YyLjAiLCJzdWIiOiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFJWVVLZ29qRjlJSjJnNXIzRVBWSlhnIiwiYXVkIjoiMWVhZjM5N2QtM2M5ZC00MmUyLWIxYmItYzA0YjQwOThkY2I3IiwiZXhwIjoxNzIyNzEyNzA1LCJpYXQiOjE3MjI2MjYwMDUsIm5iZiI6MTcyMjYyNjAwNSwibmFtZSI6IsSwYnJhaGltIMWeZW4iLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJicmhtc244MEBvdXRsb29rLmNvbSIsIm9pZCI6IjAwMDAwMDAwLTAwMDAtMDAwMC1jYjdlLWRiZDZhOWQ0YzEyZSIsImVtYWlsIjoiYnJobXNuODBAb3V0bG9vay5jb20iLCJ0aWQiOiI5MTg4MDQwZC02YzY3LTRjNWItYjExMi0zNmEzMDRiNjZkYWQiLCJhaW8iOiJEc29KcWF0Z1RNQXU3dHdtekxsV3piZnk1ZnhyZlJjVmoxY0FYb2pIVEFQbzZubTEyZ2NBcmIzOThVa2ZxQTgyWXZ5UGFsMWZSKktia3hQSjhIS215SUJsd2swdGFzcHhTVEZ0YTA4aDRldEtFTjA0UEhBIXhsUk1ENEYwciEhKlcqWkFITW8xcCF2blJMRHNxTlMzTnllSWlvSURyeEM5NDBxKnlVa3RjelNYIn0.CgDSqoTlK4EXutgXWj4Qh9L1jra1nuQE1BUSK6Gwu_ljwVdIPci7U0e-y88_WhW1IAfoy_7Jb1n2P0L3tSmx2UXccyLak0sthVfyEBsUdunTiaBKUjIab2tYvUsr4gJKF0tsIKAh6y9fagbfKOuvVPKsUiwS9fcmxN_-A5QzxUNFkz0Bk75AVuLPwC3gESz04EZMETjaKATdkietAvNemP-sKwqOAmlgvUu5yR2HwgbH3eUh9QAoG8ELZAP2vw0IjEjG-FI9c7BIpmHyFqMmhzsb-LGEqpKJBNOLe95Vrap_CJtQPUCP45VTZ0zDvekVZ1iBvpjfEFa6_f-LX_uZCg
)
Array
(
    [error] => Array
        (
            [code] => UnknownError
            [message] => 
            [innerError] => Array
                (
                    [date] => 2024-08-02T19:18:26
                    [request-id] => 7cd0296a-e68c-4505-ad90-428ffd2ece22
                    [client-request-id] => 7cd0296a-e68c-4505-ad90-428ffd2ece22
                )

        )

)

内容的提问来源于stack exchange,提问作者I. Sen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 03:04:56