2011-12-14 17 views
6

Descargo de responsabilidad: en SO He encontrado muchas preguntas similares y algunas respuestas, pero ninguna resolvió mi problema.PHP falla la conexión de socket con la puerta de enlace de notificaciones de Apple

tengo unas pocas cosas fáciles código PHP:

<?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); 
?> 

Cuando se llama desde el navegador recibo:

[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

Cualquier idea de lo que está pasando?

+0

http://stackoverflow.com/questions/7453015/ios-push-notification-problem-when-using-crontab-scheduler este enlace fue la respuesta al problema anterior –

Respuesta

8

Algunos hallazgo azar de internet que podría ayudar:

  1. Puede ser un problema de certificado. Pruebe las opciones de transmisión allow_self_signed y verify_peer para verificar eso.

  2. Intente utilizar explícitamente sslv2:// o sslv3://?

  3. problema de permisos en "/ dev/urandom"

+0

fue un problema de certificado, pero mucho más estúpido que el resuelto por su punto 1. El desarrollador que produjo el certificado insertó una contraseña no solicitada, sin mencionar que lo hizo. Gracias por los indicadores de calidad. – AsTheWormTurns

+0

esta mañana de la nada, comenzamos a recibir "la operación SSL falló con el código 1" de nuestros servidores. La definición de la versión ssl para el servidor APN resolvió el problema. sslv3: // ... Creo que Apple hizo algunos cambios en sus servidores. – emrahgunduz

+0

¿Puede dar una declaración completa de PHP para su primer punto? Soy desarrollador de dispositivos móviles y no sé mucho de php. También explica tu tercer punto. ¿Qué es "dev/urandom"? – Geek

Cuestiones relacionadas