2014-12-17 3 views
1

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

$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>" 
+0

Согласно документации, вам необходимо преобразовать строку в поток. Вот пример в C#, но я не могу сделать это в байте PHP [] contentInBytes = Encoding.UTF8.GetBytes (xml); using (Stream requestStream = request.GetRequestStream()) requestStream.Write (contentInBytes, 0, contentInBytes.Length); – grandv22

ответ

0

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

функция sendPushNotification общественности ($ notify_url, $ тзд, $ типа) {

$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);  
} 
Смежные вопросы