I'm currently working on a calendar which needs to be synchronise with Outlook. I'm using Microsoft Graph API to do so. Before using pool, I was just using Promise/All from Guzzle to send all my events to be created, but since I needed to send a lot of requests, I started using Pool.
Since then, I can't send requests anymore, since I've got this Exception :
#message: """
Client error: `POST https://graph.microsoft.com/v1.0/me/events` resulted in a `401 Unauthorized` response:
{
"error": {
"code": "InvalidAuthenticationToken",
"message": "Access token is empty.",
"innerError": (truncated...)
"""
#code: 401
I checked, the Token is here and is send.
-request: Request {#133 ▼
-method: "POST"
-requestTarget: null
-uri: Uri {#131 ▶}
-headers: array:4 [▼
"User-Agent" => array:1 [▶]
"Host" => array:1 [▶]
"headers" => array:3 [▼
"Authorization" => "Bearer EwBwA8l6BAAURSN/FHlDW5xN74t6GzbtsBBeBUYAAWTzMhExrArj8bNcA90meyaZFL2tGaUi/hMZwCHDmBldeTe1lQmKSaTqXXx/p3wEXqgP89QPu2+GISOcC5qctgaEISu7yrhpUlgd2U2XssPmFL5YW ▶"
"Content-Type" => "application/json"
"Prefer" => "outlook.timezone = "Romance Standard Time""
]
"json" => array:5 [▶]
]
-headerNames: array:4 [▶]
-protocol: "1.1"
-stream: Stream {#132 ▶}
The permissions for my app are set to :
Calendars.ReadWrite delegate and application. User.ReadWrite delegate and application aswell.
And this is my PHP code
$requests_create = function ($batch, $accessToken){
foreach ($batch as $event){
yield new Request('POST', OUTLOOK_CALENDAR, [
'headers' => [
'Authorization' => 'Bearer '.$accessToken,
'Content-Type' => 'application/json',
'Prefer' => 'outlook.timezone = "Romance Standard Time"'
],
'json' => $event
]);
};
};
$pool_create = new Pool($client, $requests_create($events_outlook_create, $accessToken), [
'concurrency' => '5',
'fulfilled' => function ($response, $index){
dump($response);
},
'rejected' => function($reason, $index){
dump($reason);
}
]);
$promise = $pool_create->promise();
$promise->wait();
That's what I get back from Azure when I ask an access token:
{#79 ▼
+"token_type": "Bearer"
+"scope": "openid Calendars.ReadWrite User.ReadWrite"
+"expires_in": 3600
+"ext_expires_in": 3600
+"access_token": "EwBwA8l6BAAURSN/FHlDW5xN74t6GzbtsBBeBUYAAd2O6oi6fdg0zdsx2kQ8PBkG/ESLWZ/eVkJo2lzm2EvTkz0FjJL56NBAeaqAVr/7o53ewvz9VKFROdGOsudZ6OG9HURaH1/cwWW4peM4rIOeUu3HyaV5QyiVP0LPAEbb/kuBEFhbcg7tVEUuT49m8DN5bb+bvWoMRpfd8KwkPQ6+ryTfR1Fc33UISjeVMwS8hewb3TEasGgOIf4Y59U2hvv1duKiKcAEpPDXWcvI3Jig0X7p7oDVmioahRp0n1MJB5sFXM4ZOpcBgoqZxSh2qnxmJY4ROIOQHDJ8OXS0vEx9uYfYaTb9f27manJzUXxcfbs8D2cBqA/RSRSLwPLqnnADZgAACPylsI4j40kGQAKSTmlvzVal99IvDQrF5KbubWTs9P9AZD8PAKHR79PqWySrItHwa9v+FuRAUCOXGPYquq8F4cqfRlGAeq1re1U0i60AK8xi+RJy4sHApsSDbtb+/ceeHNBvECdC98O8uBtJlXPUELe3KykPS+8b/OE8oplR0PCp9OJHfVFBR/RqFG0fm2Goia6kWuxyuiHvjxOy+pnnQZqF1BMeA5OMMXrBY7la/hCMdqJ48jBj+SzJO21RJ24YeLza5aoHrkvNKh4IAK/ohYxqALQsjzUBFXSqfZOrdXjtjMK7I+H2U87WtUoTWIabof3X/odvOnh0crGAwJIhEdVWrs4siZ0PgHmm25W0Q868YSl/Ks/Od7q0AnsfAMLXlEF2dBwOnJ5TOjRoCuVHsXHQixDczA8cT2aj2SkrRgpG9NwsobIVUH0E6UeYV0tI5ORok2X7nnADpLCvvAC6CJ1XdoV108g+qJiU5oZ8fP8zAjtvPsO0ssPZnOimrDXbo++2RMctYUjvQLdo6TFX3K9MtzM549e9m2/nuQ5202VvQfpcOouh+9W51c49tHuWKVNRJqrfTLIgdWhj8F1YQ5KRbyXftbl1a3rpviAQaPC6aTCq3sCot+e6GG3cSmnlGTSa0efYLV13i3SNZUuaxqmpdgnzeBK7EHhy3rnPN/lpALjnr2EI66LGRiFpOe5a2jEixuhXa30NUq+Ho902sU5hdbzmAm4L1edAd9GVOunf3NzSp5vJEmq9n1eiBpJ36B2UZFz9UNQilMl1Ag== ◀"
+"refresh_token": "MCQg*yrUESgsPIpYt7dMlM5wagLdhtkxy36y5YEgiraS6tmGqcrQ2i9XWh5rLdrGILMCfcExGuN20TnQworjo!NosGk9FOKodfHimfQ0DBtp!0zfza5Mz7hT*g1o7kY8AiUFQLZzCvtcWdEI7F5a!!Glkqjp3j5o ▶"
+"id_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IjFMVE16YWtpaGlSbGFfOHoyQkVKVlhlV01xbyJ9.eyJ2ZXIiOiIyLjAiLCJpc3MiOiJodHRwczovL2xvZ2luLm1pY3Jvc29mdG9ubGluZS5jb20vOTE ▶"
}