首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法连接到ssl://gateway.sandbox.push.apple.com:2195 (连接被拒绝)

无法连接到ssl://gateway.sandbox.push.apple.com:2195 (连接被拒绝)
EN

Stack Overflow用户
提问于 2013-11-09 02:01:30
回答 5查看 46.8K关注 0票数 12

我有一个问题,我想用php发送推送通知,但是我一直收到这个错误:

代码语言:javascript
运行
复制
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

我的代码如下:

代码语言:javascript
运行
复制
$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文件,它发送通知时没有任何问题。我试图在防火墙上为我的服务器打开端口,因为我读到这可能会导致这个问题,但仍然显示相同的错误消息。还有什么我能做的吗?如有任何帮助,将不胜感激,谢谢!

EN

回答 5

Stack Overflow用户

发布于 2014-02-19 20:14:14

这个问题是苹果推送通知中常见的问题,要解决这个问题,你需要经历如下步骤:

  1. 在服务器上本地和远程测试您的pem文件如果问题出在服务器上,请转到2个构建正确的pem文件。
  2. 在包含证书文件的文件夹上设置了错误的权限。这对我很有效:

通道模块755 your_folder_that_has_certificate_files

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

代码语言:javascript
运行
复制
 telnet gateway.push.apple.com 2195

如果这就是问题所在

代码语言:javascript
运行
复制
Trying 17.172.233.36...
telnet: connect to address 17.172.233.36: Connection refused

您可以通过在生产服务器上打开端口2195来解决此问题。您可以通过以下命令$telnet gateway.push.apple.com 2195进行验证

代码语言:javascript
运行
复制
-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. 
票数 15
EN

Stack Overflow用户

发布于 2014-06-03 17:08:44

以MAMP为例(对于我来说,内置的服务器在使用终端时工作得很好,但不是通过浏览器,所以我安装了。)

1.在这里转到-> /Library/WebServer/Documents/----copy php和ckdev.文件。

2转到terminal-->$open /private/etc-->转到->apache2>originals>httpd.config file--> **"#LoadModule "#"..(perhaps,php5_module libexec/apache2/libphp5.so",删除apache2,您还必须更改权限!)

然后转到浏览器并选中--> localhost/yourPhpFile.php

在Windows系统的情况下,

1.安装WAMP,

2.转到php.ini文件->搜索此行并删除分号";“。

3.从右下角单击WAMP图标,转到PHP>PHP Extensions>select php_openssl..

这是it..hope,这可能会帮助更多的搜索者。

票数 2
EN

Stack Overflow用户

发布于 2014-09-15 00:46:13

在我的例子中,问题是我忘记在php脚本中正确设置我的密码短语。

代码语言:javascript
运行
复制
<?php

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

// Put your private key's passphrase here:
$passphrase = 'xxx';
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19865598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档