c # — Служба уведомлений Windows: 401 недопустимый токен при попытке создать уведомление Toast в переполнении стека

Я пытался отправить уведомление о тосте на симуляторе.
Я создал приложение Windows Phone 8.1 и связал его с приложением в магазине.
После этого мне удалось получить токен доступа, который я должен использовать для вызова URI канала.

Когда я пытаюсь отправить уведомление о тосте, используя URI канала и токен доступа, я получаю эту ошибку.

Bearer error="invalid_request",error_description="Invalid token"

Это код теста php, который я создал.

<?php

//GET ACCESS TOKEN
$tokenRequest = curl_init();
curl_setopt($tokenRequest, CURLOPT_URL, 'https://login.live.com/accesstoken.srf');

curl_setopt($tokenRequest, CURLOPT_HTTPHEADER, array(
'Content-Type: application/x-www-form-urlencoded'
));

//FIELDS
$fields = array(
'grant_type' => 'client_credentials',
'client_id' => '0',
'client_secret' => 'Q',
'scope' => 'notify.windows.com'
);

$fields_string = "";
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
rtrim($fields_string, '&');

curl_setopt($tokenRequest, CURLOPT_RETURNTRANSFER, true);
curl_setopt($tokenRequest,CURLOPT_POST, count($fields));
curl_setopt($tokenRequest,CURLOPT_POSTFIELDS, $fields_string);

$output = json_decode(curl_exec($tokenRequest));
curl_close($tokenRequest);
echo "<br>";
var_dump($output);
echo "<br>";
$accessToken = $output->{'access_token'};//SEND PUSH
$sendPush = curl_init();
curl_setopt($sendPush, CURLOPT_URL, 'https://db3.notify.windows.com/?token=AwYAAABuWLaYT1f9BVJwNJCjc243U1OFXUT8MCqvsME%2ftDnhPG%2f%2fJSurxP3u1y47eqmrQZSPUlZH7koHW3Zwdj5938LYZNRdDyE6JzvyHOZvZvSo%3d');

//TOAST MESSAGE
$toastMessage = "<wp:Notification xmlns:wp=\"WPNotification\">" .
"<wp:Toast>" .
"<wp:Text1>" . "SendToast" . "</wp:Text1>" .
"<wp:Text2>" . "Text Message" . "</wp:Text2>" .
"</wp:Toast> " .
"</wp:Notification>";

curl_setopt($sendPush, CURLOPT_HEADER, true);

$headers = array('Content-Type: text/xml', "Content-Length: " . strlen($toastMessage), "X-WNS-Type: wns/toast", "Authorization: Bearer $accessToken");
curl_setopt($sendPush, CURLOPT_HTTPHEADER, $headers);

curl_setopt($sendPush, CURLOPT_RETURNTRANSFER, true);
curl_setopt($sendPush,CURLOPT_POST, 1);
curl_setopt($sendPush, CURLOPT_POSTFIELDS, $toastMessage);

$output = curl_exec($sendPush);

echo "<br>";
var_dump(curl_getinfo($sendPush, CURLINFO_HTTP_CODE));
echo "<br>";
var_dump(curl_getinfo($sendPush, CURLINFO_HEADER_OUT));
echo "<br>";
var_dump($output);
curl_close($sendPush);
// Create request to send
?>

В C # я использую это, чтобы получить URI канала.

 channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();
Debug.WriteLine(channel.Uri);

Есть идеи, что может вызвать эту проблему?

0

Решение

Я нашел решение.

Client_id, который вы должны отправить для запроса токена, не является идентификатором клиента вашего приложения.
Вместо отправки идентификатора клиента вы должны отправить SID пакета.
Очень запутанно.

7

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]