Windows Phone Push-уведомление с использованием переполнения стека

Я пытаюсь отправить уведомление TOAST (PUSH) в приложение Windows Phone (8.1) из приложения PHP. Конфигурация для уведомления сделана правильно. Конфигурация подтверждена с помощью (http://31daysofwindows8.com/push) и работает нормально. Однако, когда я использую следующий код, я получаю уведомление в виде строки «Новое уведомление». Это уведомление не имеет заголовка, изображения по умолчанию, как и должно быть. Также мы наблюдали, что, когда полезная нагрузка XML комментируется и отправляется простая строка, то же самое уведомление получено. Я сомневаюсь, что полезная нагрузка XML — это неправильно. Пожалуйста, ведите меня

$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' => 'our client id',
'client_secret' => 'our client secret',
'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>";
echo "<br>";
$accessToken = $output->{'access_token'};

$sendPush = curl_init();
curl_setopt($sendPush, CURLOPT_URL, 'our URI here');
//TOAST MESSAGE
$toastMessage = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" .
"<wp:Notification xmlns:wp=\"WPNotification\">" .
"<wp:Toast>" .
"<wp:Text1>Text...</wp:Text1>" .
"<wp:Text2>text..</wp:Text2>" .
"</wp:Toast>" .
"</wp:Notification>";
curl_setopt($sendPush, CURLOPT_HEADER, true);
echo $toastMessage;
$headers = array('Content-Type: text/xml',,"Content-Type: text/xml", "X-WNS-Type: wns/toast","Content-Length: " . strlen($toastMessage),"X-NotificationClass:2" ,"X-WindowsPhone-Target: toast","Authorization: Bearer $accessToken");
curl_setopt($sendPush, CURLOPT_HTTPHEADER, $headers);

curl_setopt($sendPush, CURLOPT_RETURNTRANSFER, true);
curl_setopt($sendPush,CURLOPT_POST, true);

curl_setopt($sendPush, CURLOPT_POSTFIELDS, $toastMessage));$output = curl_exec($sendPush);
$info = curl_getinfo($sendPush);

echo($info['request_header']);
echo "<br>";
//var_dump(curl_getinfo($sendPush, CURLINFO_HTTP_CODE));
echo "<br>";
//var_dump(curl_getinfo($sendPush, CURLINFO_HEADER_OUT));
echo "<br>";

curl_close($sendPush);

Итоговая полезная нагрузка XML выглядит следующим образом

<?xml version=\"1.0\" encoding=\"utf-8\"?>
<wp:Notification
xmlns:wp=\"WPNotification\">
<wp:Toast>
<wp:Text1>Sharvin</wp:Text1>
<wp:Text2>Notif</wp:Text2>
</wp:Toast>
</wp:Notification>"

1

Решение

Попробуйте изменить ваше toastMessage на:

$toastMessage = "<toast>".
"<visual>".
"<binding template=\"ToastText01\">".
"<text id=\"1\">".$message."</text>".
"</binding>".
"</visual>".
"</toast>";

Вы можете найти весь каталог тостов здесь https://msdn.microsoft.com/en-us/library/windows/apps/hh761494.aspx?f=255&MSPPError = -2147217396

0

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

Попробуйте использовать приведенный ниже код. Этот код хорошо протестирован и работает во многих приложениях.

открытая функция sendPushNotification ($ notify_url, $ msg, $ type) {

    $delay = 1;
$msg =  "<?xml version=\"1.0\" encoding=\"utf-8\"?>" .
"<wp:Notification xmlns:wp=\"WPNotification\">" .
"<wp:Toast>" .
"<wp:typessss>".$type."</wp:typessss>" .
"<wp:Datassss>".$msg."</wp:Datassss>" .
"</wp:Toast>" .
"</wp:Notification>";

$sendedheaders =  array(
'Content-Type: text/xml',
'Accept: application/*',
'X-WindowsPhone-Target: toast',
"X-NotificationClass: $delay");

$req = curl_init();
curl_setopt($req, CURLOPT_HEADER, true);
curl_setopt($req, CURLOPT_HTTPHEADER,$sendedheaders);
curl_setopt($req, CURLOPT_POST, true);
curl_setopt($req, CURLOPT_POSTFIELDS, $msg);
curl_setopt($req, CURLOPT_URL, $notify_url);
curl_setopt($req, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($req);
//echo '<pre>';
//print_r($response); die;
curl_close($req);
}
0

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