2014-01-09 2 views
3

Я использую следующий код для запроса HTTP POST на сервер gcm. Код всегда возвращает «Несанкционированная ошибка 401». Я читал, что речь идет о заголовках, но не может понять, что случилось. Может ли кто-нибудь сказать мне, что случилось? Есть ли другой способ отправить сообщение gcm? Любая помощь будет оценена по достоинству.Как отправить сообщение gcm в php без использования cURL?

$api_key = "AIzaSyBhuPSdHmq6-************_qxSJr8d0"; 

$message = array("msg_url" => $msg_url, "msg_title" => $msg_title); 

$url = 'https://android.googleapis.com/gcm/send'; 

$fields = array('registration_ids' => $ids,'data'=> array("message" => $message)); 

$headers = array('Authorization: key=' . $api_key,'Content-Type: application/json'); 

// use key 'http' even if you send the request to https://... 
$options = array(
    'http' => array(
     'header'=> $headers , 
     'method' => 'POST', 
     'content' => json_encode($fields), 
    ), 
); 
$context = stream_context_create($options); 
$result = file_get_contents($url, false, $context); 

var_dump($result); 
+0

Возможно, проблема связана с вашим ключом api. Попробуйте протестировать его [здесь] (http://helmibaraja.com/gcm_demo.html). – Eran

+0

Нет проблем с ключом api. Я тестировал его с помощью метода cURL, и он работает нормально. Но мне не нужен метод cURL для некоторых причин сервера. Есть ли альтернатива cURL. Ссылка, которую вы дали, использует cURL. – Rahul

ответ

5

Протестирован код с помощью моего ключа API. Я могу отправить запрос в GCM и получить правильный ответ. Кажется, что у вашего ключа API возникает проблема

<?php 

$msg_url = "http://msg.com"; 

$msg_title = "message_title"; 

$ids = array('reg_id_1', 'reg_id_2'); 

$api_key = "AIzaSyBhuPSdHmq6-************_qxSJr8d0"; 

$message = array("msg_url" => $msg_url, "msg_title" => $msg_title); 

$url = 'https://android.googleapis.com/gcm/send'; 

$fields = array('registration_ids' => $ids,'data'=> array("message" => $message)); 

$headers = array('Authorization: key=' . $api_key,'Content-Type: application/json'); 

// use key 'http' even if you send the request to https://... 
$options = array(
    'http' => array(
     'header'=> $headers , 
     'method' => 'POST', 
     'content' => json_encode($fields), 
    ), 
); 
$context = stream_context_create($options); 
$result = file_get_contents($url, false, $context); 

var_dump($result); 
?> 
Смежные вопросы