Criar aplicativos PHP com o Microsoft Graph
Este tutorial ensina como criar um aplicativo de console PHP que usa o microsoft API do Graph para acessar dados em nome de um usuário.
Observação
Para saber como usar o Microsoft Graph para acessar dados usando autenticação somente aplicativo, confira este tutorial de autenticação somente aplicativo.
Neste tutorial, você vai:
Dica
Como alternativa a seguir este tutorial, você pode baixar o código concluído por meio da ferramenta de início rápido , que automatiza o registro e a configuração do aplicativo. O código baixado funciona sem nenhuma modificação necessária.
Você também pode baixar ou clonar o repositório GitHub e seguir as instruções no README para registrar um aplicativo e configurar o projeto.
Pré-requisitos
Antes de iniciar este tutorial, você deve ter PHP e Composer instalados em seu computador de desenvolvimento.
Você também deve ter uma conta de trabalho ou de estudante da Microsoft com uma caixa de correio Exchange Online. Se você não tiver um locatário do Microsoft 365, poderá se qualificar para um por meio do Programa de Desenvolvedores do Microsoft 365; para obter detalhes, confira as perguntas frequentes. Como alternativa, você pode se inscrever para uma avaliação gratuita de 1 mês ou comprar um plano do Microsoft 365.
Observação
Este tutorial foi escrito com PHP versão 8.1.5 e Composer versão 2.3.5. As etapas neste guia podem funcionar com outras versões, mas isso não foi testado.
Registrar o aplicativo no portal
Neste exercício, você registrará um novo aplicativo no Azure Active Directory para habilitar a autenticação do usuário. Você pode registrar um aplicativo usando o centro de administração do Azure Active Directory ou usando o SDK do Microsoft Graph PowerShell.
Registrar aplicativo para autenticação de usuário
Nesta seção, você registrará um aplicativo que dá suporte à autenticação do usuário usando o fluxo de código do dispositivo.
Abra um navegador e navegue até o centro de administração do Azure Active Directory e faça logon usando uma conta de trabalho ou de estudante.
Selecione Azure Active Directory na navegação esquerda e selecione Registros de aplicativos em Gerenciar.
Selecione Novo registro. Insira um nome para seu aplicativo, por exemplo,
Graph User Auth Tutorial
.Defina tipos de conta com suporte conforme desejado. As opções são:
Opção Quem pode entrar? Contas apenas neste diretório organizacional Somente usuários em sua organização do Microsoft 365 Contas em qualquer diretório organizacional Usuários em qualquer organização do Microsoft 365 (contas corporativas ou escolares) Contas em qualquer diretório organizacional... e contas pessoais da Microsoft Usuários em qualquer organização do Microsoft 365 (contas corporativas ou escolares) e contas pessoais da Microsoft Deixe o URI de Redirecionamento vazio.
Selecione Registrar. Na página Visão geral do aplicativo, copie o valor da ID do aplicativo (cliente) e salve-o, você precisará dele na próxima etapa. Se você escolheu Contas neste diretório organizacional apenas para tipos de conta com suporte, copie também a ID do Diretório (locatário) e salve-a.
Selecione Autenticação em Gerenciar. Localize a seção Configurações avançadas e altere a alternância Permitir fluxos de cliente público para Sim e escolha Salvar.
Observação
Observe que você não configurou nenhuma permissão do Microsoft Graph no registro do aplicativo. Isso ocorre porque o exemplo usa o consentimento dinâmico para solicitar permissões específicas para autenticação do usuário.
Criar um aplicativo de console PHP
Comece inicializando um novo projeto composer. Abra sua CLI (interface de linha de comando) em um diretório em que você deseja criar o projeto. Execute o seguinte comando:
composer init
Responda aos prompts. Você pode aceitar os padrões para a maioria das perguntas, mas responder n
ao seguinte:
Would you like to define your dependencies (require) interactively [yes]? n
Would you like to define your dev dependencies (require-dev) interactively [yes]? n
Add PSR-4 autoload mapping? Maps namespace "Microsoft\Graphtutorial" to the entered relative path. [src/, n to skip]: n
Instalar dependências
Antes de seguir em frente, adicione algumas dependências adicionais que você usará posteriormente.
- SDK do Microsoft Graph para PHP para fazer chamadas para o Microsoft Graph.
- vlucas/phpdotenv para ler variáveis de ambiente de arquivos .env.
Execute o comando a seguir na CLI para instalar as dependências.
composer require microsoft/microsoft-graph vlucas/phpdotenv
Carregar configurações do aplicativo
Nesta seção, você adicionará os detalhes do registro do aplicativo ao projeto.
Crie um arquivo no diretório raiz do seu projeto chamado .env e adicione o código a seguir.
CLIENT_ID=YOUR_CLIENT_ID_HERE TENANT_ID=common GRAPH_USER_SCOPES='user.read mail.read mail.send'
Atualize os valores de acordo com a tabela a seguir.
Configuração Valor CLIENT_ID
A ID do cliente do registro do aplicativo TENANT_ID
Se você escolheu a opção para permitir apenas que usuários em sua organização entrem, altere esse valor para sua ID de locatário. Caso contrário, deixe como common
.Importante
Se você estiver usando o controle de origem, como o git, agora seria uma boa hora para excluir o arquivo .env do controle de origem para evitar o vazamento inadvertida da ID do aplicativo.
Design do aplicativo
Nesta seção, você criará um menu simples baseado em console.
Crie um arquivo no diretório raiz do seu projeto chamado main.php. Adicione as marcas PHP de abertura e fechamento.
<?php ?>
Adicione o código a seguir entre as marcas PHP.
// Enable loading of Composer dependencies require_once realpath(__DIR__ . '/vendor/autoload.php'); require_once 'GraphHelper.php'; print('PHP Graph Tutorial'.PHP_EOL.PHP_EOL); // Load .env file $dotenv = Dotenv\Dotenv::createImmutable(__DIR__); $dotenv->load(); $dotenv->required(['CLIENT_ID', 'TENANT_ID', 'GRAPH_USER_SCOPES']); initializeGraph(); greetUser(); $choice = -1; while ($choice != 0) { echo('Please choose one of the following options:'.PHP_EOL); echo('0. Exit'.PHP_EOL); echo('1. Display access token'.PHP_EOL); echo('2. List my inbox'.PHP_EOL); echo('3. Send mail'.PHP_EOL); echo('4. Make a Graph call'.PHP_EOL); $choice = (int)readline(''); switch ($choice) { case 1: displayAccessToken(); break; case 2: listInbox(); break; case 3: sendMail(); break; case 4: makeGraphCall(); break; case 0: default: print('Goodbye...'.PHP_EOL); } }
Adicione os seguintes métodos de espaço reservado no final do arquivo antes da marca PHP de fechamento. Você os implementará em etapas posteriores.
function initializeGraph(): void { // TODO } function greetUser(): void { // TODO } function displayAccessToken(): void { // TODO } function listInbox(): void { // TODO } function sendMail(): void { // TODO } function makeGraphCall(): void { // TODO }
Isso implementa um menu básico e lê a escolha do usuário na linha de comando.
Adicionar autenticação de usuário
Nesta seção, você estenderá o aplicativo do exercício anterior para dar suporte à autenticação com Azure AD. Isso é necessário para obter o token de acesso OAuth necessário para chamar o Microsoft Graph.
Criar provedor de token de acesso
O SDK do Microsoft Graph inclui provedores de autenticação com base no cliente OAuth2 da Liga PHP. No entanto, para este tutorial, você usará o fluxo de código do dispositivo para obter tokens de acesso. Os provedores de autenticação incluídos não implementam esse fluxo, portanto, você implementará um provedor de token de acesso personalizado.
Crie um novo arquivo no diretório raiz do seu projeto chamado DeviceCodeTokenProvider.php. Adicione o código a seguir.
<?php // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. use GuzzleHttp\Client; use Http\Promise\FulfilledPromise; use Http\Promise\Promise; use Http\Promise\RejectedPromise; use Microsoft\Kiota\Abstractions\Authentication\AccessTokenProvider; use Microsoft\Kiota\Abstractions\Authentication\AllowedHostsValidator; class DeviceCodeTokenProvider implements AccessTokenProvider { private string $clientId; private string $tenantId; private string $scopes; private AllowedHostsValidator $allowedHostsValidator; private string $accessToken; private Client $tokenClient; public function __construct(string $clientId, string $tenantId, string $scopes) { $this->clientId = $clientId; $this->tenantId = $tenantId; $this->scopes = $scopes; $this->allowedHostsValidator = new AllowedHostsValidator(); $this->allowedHostsValidator->setAllowedHosts([ "graph.microsoft.com", "graph.microsoft.us", "dod-graph.microsoft.us", "graph.microsoft.de", "microsoftgraph.chinacloudapi.cn" ]); $this->tokenClient = new Client(); } public function getAuthorizationTokenAsync(string $url, array $additionalAuthenticationContext = []): Promise { $parsedUrl = parse_url($url); $scheme = $parsedUrl["scheme"] ?? null; if ($scheme !== 'https' || !$this->getAllowedHostsValidator()->isUrlHostValid($url)) { return new FulfilledPromise(null); } // If we already have a user token, just return it // Tokens are valid for one hour, after that it needs to be refreshed if (isset($this->accessToken)) { return new FulfilledPromise($this->accessToken); } // https://learn.microsoft.com/azure/active-directory/develop/v2-oauth2-device-code $deviceCodeRequestUrl = 'https://login.microsoftonline.com/'.$this->tenantId.'/oauth2/v2.0/devicecode'; $tokenRequestUrl = 'https://login.microsoftonline.com/'.$this->tenantId.'/oauth2/v2.0/token'; // First POST to /devicecode $deviceCodeResponse = json_decode($this->tokenClient->post($deviceCodeRequestUrl, [ 'form_params' => [ 'client_id' => $this->clientId, 'scope' => $this->scopes ] ])->getBody()->getContents()); // Display the user prompt print($deviceCodeResponse->message.PHP_EOL); // Response also indicates how often to poll for completion // And gives a device code to send in the polling requests $interval = (int)$deviceCodeResponse->interval; $device_code = $deviceCodeResponse->device_code; // Do polling - if attempt times out the token endpoint // returns an error while (true) { sleep($interval); // POST to the /token endpoint $tokenResponse = $this->tokenClient->post($tokenRequestUrl, [ 'form_params' => [ 'client_id' => $this->clientId, 'grant_type' => 'urn:ietf:params:oauth:grant-type:device_code', 'device_code' => $device_code ], // These options are needed to enable getting // the response body from a 4xx response 'http_errors' => false, 'curl' => [ CURLOPT_FAILONERROR => false ] ]); if ($tokenResponse->getStatusCode() == 200) { // Return the access_token $responseBody = json_decode($tokenResponse->getBody()->getContents()); $this->accessToken = $responseBody->access_token; return new FulfilledPromise($responseBody->access_token); } else if ($tokenResponse->getStatusCode() == 400) { // Check the error in the response body $responseBody = json_decode($tokenResponse->getBody()->getContents()); if (isset($responseBody->error)) { $error = $responseBody->error; // authorization_pending means we should keep polling if (strcmp($error, 'authorization_pending') != 0) { return new RejectedPromise( new Exception('Token endpoint returned '.$error, 100)); } } } } } public function getAllowedHostsValidator(): AllowedHostsValidator { return $this->allowedHostsValidator; } } ?>
Configurar o cliente graph para autenticação de usuário
Nesta seção, você usará a DeviceCodeTokenProvider
classe para solicitar um token de acesso usando o fluxo de código do dispositivo.
Crie um novo arquivo no diretório raiz do seu projeto chamado GraphHelper.php. Adicione o código a seguir.
<?php class GraphHelper { } ?>
Adicione as instruções a seguir
using
dentro das marcas PHP.use Microsoft\Graph\Generated\Models; use Microsoft\Graph\Generated\Users\Item\MailFolders\Item\Messages\MessagesRequestBuilderGetQueryParameters; use Microsoft\Graph\Generated\Users\Item\MailFolders\Item\Messages\MessagesRequestBuilderGetRequestConfiguration; use Microsoft\Graph\Generated\Users\Item\SendMail\SendMailPostRequestBody; use Microsoft\Graph\Generated\Users\Item\UserItemRequestBuilderGetQueryParameters; use Microsoft\Graph\Generated\Users\Item\UserItemRequestBuilderGetRequestConfiguration; use Microsoft\Graph\GraphRequestAdapter; use Microsoft\Graph\GraphServiceClient; use Microsoft\Kiota\Abstractions\Authentication\BaseBearerTokenAuthenticationProvider; require_once 'DeviceCodeTokenProvider.php';
Adicione o seguinte código à classe
GraphHelper
.private static string $clientId = ''; private static string $tenantId = ''; private static string $graphUserScopes = ''; private static DeviceCodeTokenProvider $tokenProvider; private static GraphServiceClient $userClient; public static function initializeGraphForUserAuth(): void { GraphHelper::$clientId = $_ENV['CLIENT_ID']; GraphHelper::$tenantId = $_ENV['TENANT_ID']; GraphHelper::$graphUserScopes = $_ENV['GRAPH_USER_SCOPES']; GraphHelper::$tokenProvider = new DeviceCodeTokenProvider( GraphHelper::$clientId, GraphHelper::$tenantId, GraphHelper::$graphUserScopes); $authProvider = new BaseBearerTokenAuthenticationProvider(GraphHelper::$tokenProvider); $adapter = new GraphRequestAdapter($authProvider); GraphHelper::$userClient = GraphServiceClient::createWithRequestAdapter($adapter); }
Substitua a função vazia
initializeGraph
no main.php pelo seguinte.function initializeGraph(): void { GraphHelper::initializeGraphForUserAuth(); }
Esse código carrega informações do arquivo .env e inicializa duas propriedades, um DeviceCodeTokenProvider
objeto e um GraphServiceClient
objeto. O DeviceCodeTokenProvider
objeto será usado para solicitar um token de acesso e o objeto será usado para fazer chamadas para o GraphServiceClient
Microsoft Graph.
Testar o fluxo de código do dispositivo
Em seguida, adicione código para obter um token de acesso do GraphHelper
.
Adicione a função a seguir à classe
GraphHelper
.public static function getUserToken(): string { return GraphHelper::$tokenProvider ->getAuthorizationTokenAsync('https://graph.microsoft.com')->wait(); }
Substitua a função vazia
displayAccessToken
no main.php pelo seguinte.function displayAccessToken(): void { try { $token = GraphHelper::getUserToken(); print('User token: '.$token.PHP_EOL.PHP_EOL); } catch (Exception $e) { print('Error getting access token: '.$e->getMessage().PHP_EOL.PHP_EOL); } }
Crie e execute o aplicativo. Insira
1
quando solicitado para uma opção. O aplicativo exibe uma URL e um código de dispositivo.$ php main.php PHP Graph Tutorial Please choose one of the following options: 0. Exit 1. Display access token 2. List my inbox 3. Send mail 4. Make a Graph call 1 To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code RB2RUD56D to authenticate.
Abra um navegador e navegue até a URL exibida. Insira o código fornecido e entre.
Importante
Fique atento a todas as contas existentes do Microsoft 365 que são registradas no navegador ao navegar para
https://microsoft.com/devicelogin
. Use recursos do navegador, como perfis, modo convidado ou modo privado para garantir que você se autentique como a conta que pretende usar para teste.Depois de concluído, retorne ao aplicativo para ver o token de acesso.
Dica
Somente para fins de validação e depuração, você pode decodificar tokens de acesso do usuário (somente para contas corporativas ou escolares) usando o analisador de token online da Microsoft em https://jwt.ms. Isso pode ser útil se você encontrar erros de token ao chamar o Microsoft Graph. Por exemplo, verificar se a
scp
declaração no token contém os escopos de permissão esperados do Microsoft Graph.
Obter usuário
Nesta seção, você incorporará o Microsoft Graph ao aplicativo. Para este aplicativo, você usará o SDK do Microsoft Graph para PHP para fazer chamadas para o Microsoft Graph.
Adicione o seguinte código à classe
GraphHelper
.public static function getUser(): Models\User { $configuration = new UserItemRequestBuilderGetRequestConfiguration(); $configuration->queryParameters = new UserItemRequestBuilderGetQueryParameters(); $configuration->queryParameters->select = ['displayName','mail','userPrincipalName']; return GraphHelper::$userClient->me()->get($configuration)->wait(); }
Substitua a função vazia
greetUser
no main.php pelo seguinte.function greetUser(): void { try { $user = GraphHelper::getUser(); print('Hello, '.$user->getDisplayName().'!'.PHP_EOL); // For Work/school accounts, email is in Mail property // Personal accounts, email is in UserPrincipalName $email = $user->getMail(); if (empty($email)) { $email = $user->getUserPrincipalName(); } print('Email: '.$email.PHP_EOL.PHP_EOL); } catch (Exception $e) { print('Error getting user: '.$e->getMessage().PHP_EOL.PHP_EOL); } }
Se você executar o aplicativo agora, depois de fazer logon no aplicativo, receberá você pelo nome.
Hello, Megan Bowen!
Email: MeganB@contoso.com
Código explicado
Considere o código na getUser
função. São apenas algumas linhas, mas há alguns detalhes importantes a serem notados.
Acessando 'me'
A função cria uma solicitação para a API Obter usuário . Essa API está acessível de duas maneiras:
GET /me
GET /users/{user-id}
Nesse caso, o código chamará o ponto de extremidade da GET /me
API. Este é um método de atalho para obter o usuário autenticado sem saber a ID do usuário.
Observação
Como o ponto de extremidade da GET /me
API obtém o usuário autenticado, ele só está disponível para aplicativos que usam a autenticação do usuário. Aplicativos de autenticação somente aplicativo não podem acessar esse ponto de extremidade.
Solicitando propriedades específicas
A função usa o parâmetro de consulta $select para especificar o conjunto de propriedades de que precisa.
Tipo de retorno fortemente tipado
A função retorna um User
objeto desserializado da resposta JSON da API. Como o código usa $select
, apenas as propriedades solicitadas terão valores no objeto retornado User
. Todas as outras propriedades terão valores padrão.
Caixa de entrada listar
Nesta seção, você adicionará a capacidade de listar mensagens na caixa de entrada de email do usuário.
Adicione o seguinte código à classe
GraphHelper
.public static function getInbox(): Models\MessageCollectionResponse { $configuration = new MessagesRequestBuilderGetRequestConfiguration(); $configuration->queryParameters = new MessagesRequestBuilderGetQueryParameters(); // Only request specific properties $configuration->queryParameters->select = ['from','isRead','receivedDateTime','subject']; // Sort by received time, newest first $configuration->queryParameters->orderby = ['receivedDateTime DESC']; // Get at most 25 results $configuration->queryParameters->top = 25; return GraphHelper::$userClient->me() ->mailFolders() ->byMailFolderId('inbox') ->messages() ->get($configuration)->wait(); }
Substitua a função vazia
listInbox
no main.php pelo seguinte.function listInbox(): void { try { $messages = GraphHelper::getInbox(); // Output each message's details foreach ($messages->getValue() as $message) { print('Message: '.$message->getSubject().PHP_EOL); print(' From: '.$message->getFrom()->getEmailAddress()->getName().PHP_EOL); $status = $message->getIsRead() ? "Read" : "Unread"; print(' Status: '.$status.PHP_EOL); print(' Received: '.$message->getReceivedDateTime()->format(\DateTimeInterface::RFC2822).PHP_EOL); } $nextLink = $messages->getOdataNextLink(); $moreAvailable = isset($nextLink) && $nextLink != '' ? 'True' : 'False'; print(PHP_EOL.'More messages available? '.$moreAvailable.PHP_EOL.PHP_EOL); } catch (Exception $e) { print('Error getting user\'s inbox: '.$e->getMessage().PHP_EOL.PHP_EOL); } }
Execute o aplicativo, entre e escolha a opção 2 para listar sua caixa de entrada.
Please choose one of the following options: 0. Exit 1. Display access token 2. List my inbox 3. Send mail 4. Make a Graph call 2 Message: Updates from Ask HR and other communities From: Contoso Demo on Yammer Status: Read Received: Mon, 18 Apr 2022 14:24:16 +0000 Message: Employee Initiative Thoughts From: Patti Fernandez Status: Read Received: Mon, 18 Apr 2022 13:52:03 +0000 Message: Voice Mail (11 seconds) From: Alex Wilber Status: Unread Received: Wed, 13 Apr 2022 02:30:27 +0000 Message: Our Spring Blog Update From: Alex Wilber Status: Unread Received: Tue, 12 Apr 2022 16:46:01 +0000 Message: Atlanta Flight Reservation From: Alex Wilber Status: Unread Received: Mon, 11 Apr 2022 13:39:10 +0000 Message: Atlanta Trip Itinerary - down time From: Alex Wilber Status: Unread Received: Fri, 08 Apr 2022 18:36:01 +0000 ... More messages available? True
Código explicado
Considere o código na getInbox
função.
Acessando pastas de email bem conhecidas
A função passa /me/mailFolders/inbox/messages
para o construtor de solicitações, que cria uma solicitação para a API de mensagens de lista . Como inclui o /mailFolders/inbox
segmento, a API só retornará mensagens na pasta de email solicitada. Nesse caso, como a caixa de entrada é uma pasta padrão e conhecida dentro da caixa de correio de um usuário, ela é acessível por meio de seu nome conhecido. As pastas não padrão são acessadas da mesma maneira, substituindo o nome conhecido pela propriedade ID da pasta de email. Para obter detalhes sobre os nomes de pastas conhecidos disponíveis, consulte o tipo de recurso mailFolder.
Acessando uma coleção
Ao contrário da getUser
função da seção anterior, que retorna um único objeto, esse método retorna uma coleção de mensagens. A maioria das APIs no Microsoft Graph que retornam uma coleção não retorna todos os resultados disponíveis em uma única resposta. Em vez disso, eles usam paginação para retornar uma parte dos resultados, fornecendo um método para os clientes solicitarem a próxima "página".
Tamanhos de página padrão
APIs que usam paginação implementam um tamanho de página padrão. Para mensagens, o valor padrão é 10. Os clientes podem solicitar mais (ou menos) usando o parâmetro de consulta $top . No getInbox
, isso é feito com a queryParameters->top
propriedade nos parâmetros de consulta.
Observação
O valor passado é queryParameters->top
um limite superior, não um número explícito. A API retorna várias mensagens até o valor especificado.
Obtendo páginas subsequentes
Se houver mais resultados disponíveis no servidor, as respostas de coleção incluirão uma @odata.nextLink
propriedade com uma URL de API para acessar a próxima página. O SDK do PHP expõe isso como o getOdataNextLink
método em objetos de solicitação de coleção. Se esse método retornar uma cadeia de caracteres não vazia, haverá mais resultados disponíveis. Para obter mais informações, consulte Página por meio de uma coleção usando os SDKs do Microsoft Graph.
Classificando coleções
A função usa o parâmetro de consulta $orderby para solicitar resultados classificados no momento em que a mensagem é recebida (receivedDateTime
propriedade). Ele inclui o palavra-chave para que as DESC
mensagens recebidas mais recentemente sejam listadas primeiro.
Enviar email
Nesta seção, você adicionará a capacidade de enviar uma mensagem de email como o usuário autenticado.
Adicione o seguinte código à classe
GraphHelper
.public static function sendMail(string $subject, string $body, string $recipient): void { $message = new Models\Message(); $message->setSubject($subject); $itemBody = new Models\ItemBody(); $itemBody->setContent($body); $itemBody->setContentType(new Models\BodyType(Models\BodyType::TEXT)); $message->setBody($itemBody); $email = new Models\EmailAddress(); $email->setAddress($recipient); $to = new Models\Recipient(); $to->setEmailAddress($email); $message->setToRecipients([$to]); $sendMailBody = new SendMailPostRequestBody(); $sendMailBody->setMessage($message); GraphHelper::$userClient->me()->sendMail()->post($sendMailBody)->wait(); }
Substitua a função vazia
sendMail
no main.php pelo seguinte.function sendMail(): void { try { // Send mail to the signed-in user // Get the user for their email address $user = GraphHelper::getUser(); // For Work/school accounts, email is in Mail property // Personal accounts, email is in UserPrincipalName $email = $user->getMail(); if (empty($email)) { $email = $user->getUserPrincipalName(); } GraphHelper::sendMail('Testing Microsoft Graph', 'Hello world!', $email); print(PHP_EOL.'Mail sent.'.PHP_EOL.PHP_EOL); } catch (Exception $e) { print('Error sending mail: '.$e->getMessage().PHP_EOL.PHP_EOL); } }
Execute o aplicativo, entre e escolha a opção 3 para enviar um email para si mesmo.
Please choose one of the following options: 0. Exit 1. Display access token 2. List my inbox 3. Send mail 4. Make a Graph call 3 Mail sent.
Observação
Se você estiver testando com um locatário do desenvolvedor do Microsoft 365 Developer Program, o email enviado talvez não seja entregue e você poderá receber um relatório de não entrega. Se isso acontecer com você, entre em contato com o suporte por meio do Centro de administração do Microsoft 365.
Para verificar se a mensagem foi recebida, escolha a opção 2 para listar sua caixa de entrada.
Código explicado
Considere o código na sendMail
função.
Enviar email
A função usa o $userClient->me()->sendMail()
construtor de solicitações, que cria uma solicitação para a API enviar email . O construtor de solicitações usa um corpo de solicitação que contém a mensagem a ser enviada.
Criando objetos
Ao contrário das chamadas anteriores para o Microsoft Graph que só leem dados, essa chamada cria dados. Para fazer isso com a biblioteca de clientes, crie uma matriz associativa que representa os dados, defina as propriedades desejadas e envie-as na chamada de API. Como a chamada está enviando dados, o POST
método é usado em vez de GET
.
Opcional: adicionar seu próprio código
Nesta seção, você adicionará seus próprios recursos do Microsoft Graph ao aplicativo. Isso pode ser um snippet de código da documentação do Microsoft Graph ou do Graph Explorer ou código que você criou. Esta seção é opcional.
Atualizar o aplicativo
Adicione o seguinte código à classe
GraphHelper
.public static function makeGraphCall(): void { // INSERT YOUR CODE HERE }
Substitua a função vazia
makeGraphCall
no main.php pelo seguinte.function makeGraphCall(): void { try { GraphHelper::makeGraphCall(); } catch (Exception $e) { print(PHP_EOL.'Error making Graph call'.PHP_EOL.PHP_EOL); } }
Escolher uma API
Encontre uma API no Microsoft Graph que você gostaria de experimentar. Por exemplo, a API criar eventos . Você pode usar um dos exemplos na documentação da API ou criar sua própria solicitação de API.
Configurar as permissões
Verifique a seção Permissões da documentação de referência da API escolhida para ver quais métodos de autenticação têm suporte. Algumas APIs não dão suporte somente a aplicativos ou contas pessoais da Microsoft, por exemplo.
- Para chamar uma API com autenticação de usuário (se a API dá suporte à autenticação do usuário (delegada), adicione o escopo de permissão necessário no .env.
- Para chamar uma API com autenticação somente aplicativo, consulte o tutorial de autenticação somente aplicativo .
Adicionar seu código
Adicione seu código à makeGraphCall
função em GraphHelper.php.
Parabéns!
Você concluiu o tutorial do PhP Microsoft Graph. Agora que você tem um aplicativo de trabalho que chama Microsoft Graph, você pode experimentar e adicionar novos recursos.
- Saiba como usar a autenticação somente aplicativo com o SDK do Microsoft Graph PHP.
- Visite a visão geral do Microsoft Graph para ver todos os dados que você pode acessar com o Microsoft Graph.
Exemplos de PHP
Tem algum problema com essa seção? Se tiver, envie seus comentários para que possamos melhorar esta seção.