【问题标题】:Unable to connect to ssl://gateway.sandbox.push.apple.com:2195 (Connection refused)无法连接到 ssl://gateway.sandbox.push.apple.com:2195(连接被拒绝)
【发布时间】:2013-11-08 18:01:30
【问题描述】:

我有一个问题,我想使用 php 发送推送通知,但是我不断收到此错误:

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

我的代码如下:

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

?>

我认为问题出在我正在使用的服务器上,因为我在不同的服务器上发布了相同的代码和相同的 .pem 文件,它发送的通知没有任何问题。我试图为我的服务器打开防火墙上的端口,因为我读到这可能会导致此问题,但仍然出现相同的错误消息。还有什么我可以做的吗?任何帮助将不胜感激,谢谢!

【问题讨论】:

    标签: php ios ssl


    【解决方案1】:

    这个问题是苹果推送通知中的常见问题,要解决这个错误,你必须通过以下步骤:

    1. 如果问题是服务器,则在本地和远程测试您的 pem 文件,请转到 2,否则构建 pem 正确文件。

    2. 在包含证书文件的文件夹上设置权限错误。这对我有用:

    chmod 755 your_folder_that_has_certificate_files

    3.从您的托管服务器检查 apns 端口 2195 的连接性,如下所示:

    运行

     telnet gateway.push.apple.com 2195
    

    如果这是问题

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

    您可以通过在生产服务器上打开端口 2195 来解决此问题。您可以通过以下命令进行验证 $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. 
    

    【讨论】:

    • 如何从我的托管服务器远程登录?我正在使用godaddy。服务器通常确实允许远程登录到他们的服务器,但不允许从他们的服务器到另一个服务器。如果您能对此有所了解,那就太好了。目前,如果我在本地运行 APN,它就可以工作,但是当我将文件上传到 godaddy 托管时,我收到连接被拒绝错误。
    • 你解决过这个Saad吗?我处于完全相同的情况。谢谢。
    • ^另一种方式是这样,像这样 192.4.3.xx/~username/foldername/filename 做一个服务器的临时链接就这样
    • 嗨@SaadBashir 我和godaddy 有同样的问题。你解决了吗?
    • @SaadBashir 面临同样的问题。有没有找到解决办法
    【解决方案2】:

    如果是MAC, (对我来说,内置服务器使用终端但不能通过浏览器工作正常,所以我安装了 MAMP。)

    1.转到---> /Library/WebServer/Documents/----复制phpckdev.pem strong> 文件在这里。

    2 转到终端-->$open /private/etc-->转到--->apache2>originals>httpd.config 文件--> **“#LoadModule php5_module libexec/apache2/libphp5.so”,删除“#”..(也许您还必须更改权限..!)

    然后转到浏览器并检查--> localhost/yourPhpFile.php

    如果是Windows系统

    1.安装WAMP

    2.goto php.ini 文件--->搜索此“;extension=php_openssl.dll”行并删除分号“;强>”。

    3.单击右下角的WAMP图标转到PHP>PHP Extensions>选择php_openssl..

    就是这样..希望这可以帮助更多的寻求者。

    【讨论】:

      【解决方案3】:

      就我而言,问题是我忘记在 php 脚本中正确设置密码。

      <?php
      
      // Put your device token here (without spaces):
      $deviceToken = 'xxx';
      
      // Put your private key's passphrase here:
      $passphrase = 'xxx';
      

      【讨论】:

        【解决方案4】:

        对我来说,这是 SELinux 问题。

        因此,在您的 /etc/selinux/config 文件中,将 SELINUX=enforcing 设置为 SELINUX=disabled。并重新启动。就是这样。

        【讨论】:

          【解决方案5】:

          我刚刚遇到了同样的错误,我找到了解决问题的方法。

          ‚mypassword‘ 而不是'mypassword'

          似乎记事本更改了引号。这确实花了我 4 个小时...希望有人会阅读此内容并节省一些时间...

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-02-02
            • 1970-01-01
            • 2011-09-16
            • 2020-12-31
            • 1970-01-01
            • 1970-01-01
            • 2016-01-26
            • 1970-01-01
            相关资源
            最近更新 更多