我正在建立我自己的C2DM應用程序。我首先從一個小的Android應用程序開始測試推送功能。如果我只是在我的shell中使用正確的設置調用curl命令,它就可以工作。C2DM服務器與PHP 401錯誤
現在爲服務器部分我想使用PHP,但因爲它看起來我做錯了什麼,因爲當我嘗試發送消息到客戶端時,我總是收到401錯誤消息。首先,代碼由兩部分組成。第一個curl請求請求服務器令牌。這工作,我得到一個真正的響應從谷歌與工作令牌!
第二個捲曲請求以401錯誤消息結束。任何想法我做錯了什麼?
$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;
好的。我不知道爲什麼,但沒有任何工作了。即使我捲曲的例子,我總是得到一個401錯誤。現在,如果我嘗試認證自己,我會得到一個SID,LSID和Auth Token。我不確定昨天是否一樣?我想昨天我只拿回了1個令牌。但我必須稍後再檢查一次。 什麼改變也許是我換電腦。我再也不在同一臺計算機上了,因爲我昨天嘗試了所有工作。這可能需要做些什麼嗎? – nino 2011-02-07 13:04:59
嗨,尼諾!我只是複製你在網上發佈的代碼,而且我也遇到同樣的401問題。所以......你能告訴我你是如何解決這個問題的,或者你可以發佈你的工作代碼給我嗎?謝謝你的幫助!你的 – 2011-02-14 12:56:41