2013-02-07 69 views
0

好的,我知道有很多關於APNS連接失敗的討論。大多數討論建議檢查傳出服務器端口2195以確保它允許連接。這不是我的問題,雖然我遇到了「連接被拒絕」錯誤(111)。APNS連接問題

我已經驗證了我的服務器和沙箱服務器之間的通信正在從蘋果網關接收200響應。我知道我的證書很好,因爲我已經使用來自Mac的openssl測試了連接。我也可以通過網關一次從我的服務器連接,但無法獲得一致的連接。

我使用的測試代碼如下:

$ctx = stream_context_create(); 

stream_context_set_option($ctx,'ssl', 'local_cert', $pem); 
stream_context_set_option($ctx, 'ssl', 'passphrase', $key); 
$gateway = 'gateway.sandbox.push.apple.com'; 
$port = '2195'; 

$remote_socket = 'ssl://'.$gateway.':'.$port; 
$fp = stream_socket_client($remote_socket, $err, $errstr, 60,STREAM_CLIENT_CONNECT, $ctx); 

if (!$fp){ 
    echo $err.'<br>'; 
    echo $errstr.'</br>'; 
    echo 'error=apple failed to connect'; 
} else { 
    fclose($fp); 
    echo 'success'; 
} 

我已經把.pem文件在相同的目錄中的腳本文件,除去使用的口令的,verify_peer指定,所使用的STREAM_CLIENT_ASYNC_CONNECT和STREAM_CLIENT_PERSISTENT標誌沒有成功。

這是我正在做的事情,問題與apns沙箱服務器或這是我應該期望從apns?任何見解或幫助你可以提供非常感謝 - 我的頭髮變得很瘦!

問候。

PS - 如果我刪除了密碼,我得到一個115錯誤,說明密鑰無法訪問。

回答

1

其他有些事情嘗試:

  1. 使用STREAM_CLIENT_CONNECT | STREAM_CLIENT_PERSISTENT在stream_socket_client通話
  2. 不要verify_peer
  3. 檢查使用的PHP腳本的所有者有足夠的權限讀取pem文件並連接到位於其他地方的端口(即/不僅僅是本地主機)
+0

謝謝尼克。 我已經試過了STREAM_CLIENT_CONNECT | STREAM_CLIENT_PERSISTENT標誌,並且沒有成功就取消了verify_peer選項。我在活動的網絡連接的開發站點上有測試腳本,並且pem文件是可讀的。雖然我能夠連接一次,但我開始認爲這是一個端口2195限制問題。我必須對此做更多的研究。我會盡快發佈回覆。 – SCKaymon

2

儘管能夠t o至少連接一次,事實證明,如果沒有GoDaddy上的虛擬專用服務器,您將無法訪問APNS網關。每月至少80美元,預付,這太昂貴了。談到其他手段。

+0

感謝您關注此事。很高興知道。 – Nick