Php 推送通知无法连接没有错误字符串

Php 推送通知无法连接没有错误字符串,php,iphone,ios,push-notification,Php,Iphone,Ios,Push Notification,我在stackoverflow上浏览了几乎所有与此相关的帖子,但对我帮助不大,可能是因为我没有很好地理解。当我使用php代码发送推送通知时,它表示连接失败。我以前在许多其他项目中使用过相同的代码。但这一次我无法找到问题所在 PHP代码 $status_message="Failure"; $deviceToken = ""; $userExist=1; $message = 'You Recieved a new Notifcation from test'; $badge

我在stackoverflow上浏览了几乎所有与此相关的帖子,但对我帮助不大,可能是因为我没有很好地理解。当我使用php代码发送推送通知时,它表示连接失败。我以前在许多其他项目中使用过相同的代码。但这一次我无法找到问题所在

PHP代码

  $status_message="Failure"; 
  $deviceToken = "";
  $userExist=1;
  $message = 'You Recieved a new Notifcation from test';
  $badge = (int)1;
  $sound = 'cow.caf';

  $body = array();
  if($userExist==1) 
  {
      $body['aps'] = array('alert' => $message);
      $body['aps']['sound'] = $sound;
     if(isset($badge)) 
   {
    $body['aps']['badge'] = $badge;
    }
     else
    {
    $body['aps']['message'] = $message;
    }

   }

    $ctx = stream_context_create();
    stream_context_set_option($ctx,'ssl','local_cert','apns-dev.pem');
    stream_context_set_option($ctx,'ssl','verify_peer',false);
    $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 $errstr\n";
       print_r($err);
       return;
    }
  else 
    {
      print "Connection OK\n";
    }
IPhone端

我无法连接0。我和iphone的伙计们谈过,他们说他们的PEM是正确的,这是另一个可能的原因。但是,他们在他们的末端进行了测试,并在他们的末端进行了推进。他们确信他们是对的。PEM文件位于服务器的正确位置

现在服务器设置已启用tcp 21952196

服务器端

root@servername [~]# openssl version
OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008
root@servername [~]# iptables -nL | grep 2195
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:2195
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:2195
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:2195
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:2195
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:2195
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:2195
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:2195
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:2195
root@servername [~]# iptables -nL | grep 2196
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:2196
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:2196
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:2196
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:2196
我试着用PUTTY来验证telnet gateway.push.apple.com 2195,它正在从服务器连接

我不确定问题出在哪里。我对代码有信心,因为我在6个项目中使用了相同的文件。我的主机是VPS


请帮助

最后,我可以使用谷歌APNS库完成这项工作。我以前的代码在6个项目中运行良好,但当我阅读了本文档时

我发现除了iOS配置门户或Mac Developer certificate Utility创建的SSL标识(证书和相关私钥)之外,您还应该在您的提供商
列下安装委托CA(2048)根证书 连接推送服务时出现问题

我从iphone开发者那里下载了委托根证书,并在服务器上安装/上传了pem证书,它成功了


如果有人有相同的问题,请遵循此操作。

您确定使用了正确的安全证书吗?是的,我确信我有正确的PEM证书。iphone的家伙们尝试从他们的终端发送推送,结果成功了。我不知道他们的路,但我看到了推coming@Sharmaji您正在使用linux服务器或windows&使用开发人员证书。@AdvaitAmin我正在使用linux服务器。我以前从未在推送通知项目中使用过开发人员证书。我只使用了IPhone提供的PEM文件。你能解释一下它是什么吗?@Sharmaji,在PEM中有两种类型的证书。(1)开发者(2)生产。当应用程序在应用程序商店上线时,在正常测试和生产中使用的开发人员。我也有同样的问题。我阅读了文档:我应该要求我的提供商安装委托CA证书,还是应该简单地将其复制到SSL标识附近?CA证书对所有开发人员都是一样的吗?谢谢