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!
Ce problème est courant dans les notifications Apple Push. Pour résoudre cette erreur, vous devez procéder comme suit:
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.
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.
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.
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';
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 ...
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.