Использование C2DM получить 401 проблема? - PullRequest
1 голос
/ 17 февраля 2011

HI ~ все!Я получил регистрационный идентификатор для телефона и токен авторизации от Google для моей учетной записи Gmail, которая выполняет push.

Но когда я отправляю свой токен авторизации и регистрационный идентификатор в Ubuntu и пытаюсь опубликовать его по php, php curl и только curl, чтобы запросить C2DM, чтобы получить сообщение.И я всегда получаю 401 Несанкционированный.

И это мой php код ....

$post_params = array ( "Email" => $MY_GOOGLE_ACC, "Passwd" =>

$MY_GOOGLE_PWD, "accountType"=>"GOOGLE", "source=" . $MY_GOOGLE_SRC, "service=ac2dm" );     

$first = true;   
$data_msg = "";    

foreach ($post_params as $key => $value) {      
if ($first)       
$first = false;     
else       
$data_msg .= "&";     
 $data_msg .= urlencode($key) ."=". urlencode($value);    
}   

$x = curl_init("https://www.google.com/accounts/ClientLogin");

curl_setopt($x, CURLOPT_HEADER, 1);    
curl_setopt($x, CURLOPT_POST, 1);    
curl_setopt($x, CURLOPT_POSTFIELDS, $data_msg);    
curl_setopt($x, CURLOPT_RETURNTRANSFER, 1);   
$data = curl_exec($x);    
curl_close($x);   
$response = $data;

$authKey = trim(substr($response, 4+strpos($response, "SID=")));

echo $authKey;   $collapse_key = 'something';   
$post_params = array ( "registration_id" => $DEVICE_TOKEN, "collapse_key" =>

$collapse_key, "data.payload"=>"cakephp" );

$first = true;   
$data_msg = "";    

foreach ($post_params as $key => $value) {      
 if ($first)      
$first = false;    
 else       
$data_msg .= "&";     
 $data_msg .= urlencode($key) ."=". urlencode($value);    
}    

$size=strlen($data_msg); 

$x = curl_init("https://android.apis.google.com/c2dm/send");    
curl_setopt($x, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded', 'Content-Length:'. $size, 'Authorization: GoogleLogin auth=' . $authKey));
curl_setopt($x, CURLOPT_HEADER, 1);    
curl_setopt($x, CURLOPT_POST, 1);    
curl_setopt($x, CURLOPT_POSTFIELDS, $data_msg);    
curl_setopt($x, CURLOPT_RETURNTRANSFER, 1);    
$data = curl_exec($x);    
curl_close($x);    
$response = $data; 

Я что-то пропускаю или делаю что-то не так?

И любойпомощь будет высоко ценится, спасибо!

1 Ответ

0 голосов
/ 10 ноября 2011

Кажется, вы извлекаете SID из ответа, а не из поля Auth.

$authKey = trim(substr($response, 4+strpos($response, "SID=")));

должно быть

$authKey = trim(substr($response, 5+strpos($response, "Auth=")));

Попробуйте напечатать весь ответ, вы увидите что-то вроде:

SID=DQAAAGgA...7Zg8CTN
LSID=DQAAAGsA...lk8BBbG
Auth=DQAAAGgA...dk3fA5N

Это последнее поле, которое вы ищете!

...