首页 > 解决方案 > 无法使用 Teams Graph API php 发送 chatMessage

问题描述

在@CarlZhao 的帮助下,我终于对 OAuth 和 Graph 之间的区别有了一个很好的理解。我正在我的应用程序中构建功能,以便用户将消息发布到团队频道。到目前为止,我可以列出团队、频道和删除频道。我很难尝试发送chatMessage. 我知道,因为根据我的理解,发送 chatMessage 是一个delegated permission而不是一个,application permission所以当用户使用我的应用程序进行身份验证时,我必须使用accessToken从 OAuth 创建的。

我正在做的是将该令牌保存在我的数据库中,以便在尝试发送chatMessage. 不确定这是否正确。所以在我的代码中,我正在创建一个新的 Graph 实例,但我使用的是用户的访问令牌而不是图形的令牌。

$useraccesstoken = "************************************";

// create a new OAuth graph from useraccesstoken
$graph_message = new Graph();
$graph_message->setAccessToken($useraccesstoken);

// post message
$data = [
    'body' => [
        'content' => 'This is a message from the API I made it works'
    ],
];
$message = $graph_message->createRequest("POST", "/teams/$group_id/channels/$channel_id/messages")
                ->addHeaders(array("Content-Type" => "application/json"))
                ->attachBody($data)
                ->setReturnType(Model\User::class)
                ->execute();

这不会产生任何错误,但没有任何反应,chatMessage也没有发布。我已经仔细检查了,我的$group_id$channel_id是正确的。

我使用$useraccesstoken正确吗?我可以使用 启动一个新Graph()实例$useraccesstoken吗?

标签: phpazure-active-directorymicrosoft-graph-api

解决方案


是的,您可以使用 $useraccesstoken 启动一个新的 Graph() 实例。

发送消息的图 API不返回User::class。试试你的代码

->setReturnType(Model\ChatMessage::class)

默认情况下,访问令牌在一小时内无效,请参见此处。你不能一直使用它,所以看起来你不需要存储在数据库中。最好在访问令牌过期之前刷新令牌,此步骤将向您展示如何刷新令牌。

默认值为 1 小时 - 1 小时后,客户端必须使用刷新令牌(通常是静默)获取新的刷新令牌和访问令牌。


推荐阅读