web-dev-qa-db-fra.com

Impossible de se connecter à ssl: //gateway.sandbox.Push.Apple.com: 2195 (connexion refusée)

J'ai un problème, je voudrais envoyer des notifications Push en php, mais je continue à avoir cette erreur:

Warning: stream_socket_client() [function.stream-socket-client]: unable to connect to ssl://gateway.sandbox.Push.Apple.com:2195 (Connection refused) in /home/colupon/public_html/iPhone/Push/index.php on line 21
Failed to connect: 111 Connection refused

Mon code est le suivant:

$deviceToken = '0f************************************************************78';

$passphrase = '************';

$message = 'My first Push notification!';

////////////////////////////////////////////////////////////////////////////////

$ctx = stream_context_create();
$filename = 'ckdev.pem';
stream_context_set_option($ctx, 'ssl', 'local_cert', $filename);
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);

// Open a connection to the APNS server
$fp = stream_socket_client(
'ssl://gateway.sandbox.Push.Apple.com:2195', $err,
$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);

if (!$fp)
exit("Failed to connect: $err $errstr" . PHP_EOL);

echo 'Connected to APNS' . PHP_EOL;

// Create the payload body
$body['aps'] = array(
'alert' => $message,
'sound' => 'default'
);

// Encode the payload as JSON
$payload = json_encode($body);

// Build the binary notification
$msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . 

$payload;

// Send it to the server
$result = fwrite($fp, $msg, strlen($msg));

if (!$result)
    echo 'Message not delivered' . PHP_EOL;
else
    echo 'Message successfully delivered'.PHP_EOL;

// Close the connection to the server
fclose($fp);

?>

Je pense que le problème vient du serveur que j'utilise, car j'ai posté le même code et le même fichier .pem sur un autre serveur et la notification a été envoyée sans aucun problème. J'ai tenté d'ouvrir des ports sur le pare-feu pour mon serveur car j'ai lu que cela pouvait causer ce problème, mais le même message d'erreur est quand même apparu. Y at-il autre chose que je puisse faire? Toute aide serait grandement appréciée, merci!

9
shadowarcher

Ce problème est courant dans les notifications Apple Push. Pour résoudre cette erreur, vous devez procéder comme suit:

  1. Testez vos fichiers pem localement et à distance sur le serveur si le problème est serveur, allez à 2 sinon créez le fichier pem correct.

  2. Configurez la mauvaise autorisation sur le dossier contenant le fichier de certificat. Cela a fonctionné pour moi:

chmod 755 votre_folder_that_has_certificate_files

3.Vérifiez la connectivité du port 2195 des APN à partir de votre serveur d'hébergement en procédant comme suit:

courir 

 telnet gateway.Push.Apple.com 2195

si c'est le problème 

Trying 17.172.233.36...
telnet: connect to address 17.172.233.36: Connection refused

vous pouvez résoudre ce problème en ouvrant le port 2195 sur le serveur de production. Vous pouvez vérifier en suivant la commande $ telnet gateway.Push.Apple.com 2195

-bash-3.2# telnet gateway.Push.Apple.com 2195

Trying 17.149.38.141...
Connected to gateway.Push.Apple.com (17.149.38.141).
Escape character is '^]'.
Connection closed by foreign Host. 
10
HMagdy

Dans le cas de MAC, (Le serveur intégré fonctionnait correctement avec un terminal, mais pas avec un navigateur. Pour moi, j’ai donc installé MAMP.)

1.Allez dans ---> / Bibliothèque/serveur Web/Documents/----, copiez les fichiers php et ckdev . pem ici.

2 allez sur terminal -> $ open/private/etc -> allez sur ---> Apache2> originaux> fichier httpd.config -> ** "# LoadModule php5_module libexec/Apache2/libphp5.so ", supprimez" # ".. (vous devrez peut-être également modifier l'autorisation ..!)

puis allez dans le navigateur et vérifiez -> localhost/yourPhpFile.php

En cas de système Windows,

1.Installez WAMP,

2.goto php.ini fichier ---> recherchez cette ligne "; extension = php_openssl.dll" et supprimez le point-virgule ";".

3.cliquez sur l'icône WAMP dans le coin inférieur droit, allez à PHP> Extensions PHP> sélectionnez php_openssl ..

C'est ça .. J'espère que cela aidera d'autres chercheurs.

2
mavericks

Dans mon cas, le problème était que j'avais oublié de configurer ma phrase secrète correctement dans un script php. 

<?php

// Put your device token here (without spaces):
$deviceToken = 'xxx';

// Put your private key's passphrase here:
$passphrase = 'xxx';
1
wzbozon

Je viens d'avoir l'erreur même et j'ai trouvé la solution à mon problème. 

‚mypassword‘ au lieu de 'mypassword' 

On dirait que le bloc-notes a changé les guillemets. Cela m'a pris littéralement 4 heures ... J'espère que quelqu'un lira ceci et gagnera du temps ...

0
David Seek

Pour moi, c'était le problème SELinux.

Donc, dans votre fichier/etc/selinux/config, définissez le paramètre SELINUX = sur SELINUX = disabled . Et redémarrer. C'est tout.

0
Kashif