2011-12-14 8 views
6

Disclaimer: su SO Ho trovato molte domande simili e alcune risposte ma nessuna ha risolto il problema.PHP non riesce a connettere il socket con il gateway di notifica Apple

Ho questo codice PHP facile:

<?php 
    $deviceToken = "myDeviceToken"; 
    $message = "Hello from server"; 
    $badge = 1; 
    $sound = "default"; 

    // Construct the notification payload 
    $body['aps'] = array(
     'alert' => $message 
    ); 

    if ($badge) { 
     $body['aps']['badge'] = $badge; 
    } 

    if ($sound) { 
     $body['aps']['sound'] = $sound; 
    } 

    /* End of Configurable Items */ 
    $ctx = stream_context_create(); 
    stream_context_set_option($ctx, 'ssl', 'local_cert', 'my.pem'); 

    $fp = stream_socket_client("ssl://gateway.sandbox.push.apple.com:2195", $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx); 

    if (!$fp) { 
     print "Failed to connect $err $errstrn"; 
     return; 
    } else { 
     print "Connection OK\n"; 
    } 

    $payload = json_encode($body); 
    $msg = chr(0) . pack("n", 32) . pack("H*", str_replace(" ", "", $deviceToken)) . pack("n", strlen($payload)) . $payload; 
    print "sending message :" . $payload . "\n"; 
    fwrite($fp, $msg); 
    fclose($fp); 
?> 

Quando viene chiamato dal browser ricevo:

[13-Dec-2011 18:52:52] PHP Warning: stream_socket_client() [function.stream-socket-client]: SSL operation failed with code 1. OpenSSL Error messages: error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure in /home/srv/public_html/myTest.php on line 28

[13-Dec-2011 18:52:52] PHP Warning: stream_socket_client() [function.stream-socket-client]: Failed to enable crypto in /home/srv/public_html/myTest.php on line 28

[13-Dec-2011 18:52:52] PHP Warning: stream_socket_client() [function.stream-socket-client]: unable to connect to ssl://gateway.sandbox.push.apple.com:2195 (Unknown error) in /home/srv/public_html/myTest.php on line 28

Qualsiasi idea di quello che sta succedendo?

+0

http://stackoverflow.com/questions/7453015/ios-push-notification-problem-when-using-crontab-scheduler questo link era la risposta per il problema di cui sopra –

risposta

8

Alcuni ritrovamento casuale da internet che potrebbe aiutare:

  1. Può essere un problema del certificato. Prova le opzioni di streaming allow_self_signed e verify_peer per verificarlo.

  2. Provare ad utilizzare in modo esplicito sslv2:// o sslv3://?

  3. problema di permessi su "/ dev/urandom"

+0

era un problema di certificato, ma molto più stupido di quello risolto dal tuo punto 1. Lo sviluppatore che ha prodotto il certificato ha inserito una password non richiesta, senza neanche menzionarlo. Grazie per i puntatori di qualità. – AsTheWormTurns

+0

questa mattina dal nulla, abbiamo iniziato a ricevere 'operazione SSL fallita con il codice 1' dai nostri server. La definizione della versione ssl per il server APN ha risolto il problema. sslv3: // ... Penso che Apple abbia apportato alcune modifiche ai loro server. – emrahgunduz

+0

Puoi per favore fornire una dichiarazione php completa per il tuo primo punto. Sono uno sviluppatore mobile e non conosco molto PHP. Spiega anche il tuo terzo punto. Che cos'è "dev/urandom"? – Geek