今天突然出现一个非常奇怪的错误,说它无法连接到相应的网关...任何修复建议?
这是记录器输出:
Wed, 08 Jun 2011 15:05:44 +0200 ApnsPHP[21724]: INFO: Trying ssl://gateway.sandbox.push.apple.com:2195...
Wed, 08 Jun 2011 15:05:45 +0200 ApnsPHP[21724]: ERROR: Unable to connect to 'ssl://gateway.sandbox.push.apple.com:2195': (0)
Wed, 08 Jun 2011 15:05:45 +0200 ApnsPHP[21724]: INFO: Retry to connect (1/3)...
Wed, 08 Jun 2011 15:05:46 +0200 ApnsPHP[21724]: INFO: Trying ssl://gateway.sandbox.push.apple.com:2195...
Wed, 08 Jun 2011 15:05:47 +0200 ApnsPHP[21724]: ERROR: Unable to connect to 'ssl://gateway.sandbox.push.apple.com:2195': (0)
Wed, 08 Jun 2011 15:05:47 +0200 ApnsPHP[21724]: INFO: Retry to connect (2/3)...
Wed, 08 Jun 2011 15:05:48 +0200 ApnsPHP[21724]: INFO: Trying ssl://gateway.sandbox.push.apple.com:2195...
Wed, 08 Jun 2011 15:05:48 +0200 ApnsPHP[21724]: ERROR: Unable to connect to 'ssl://gateway.sandbox.push.apple.com:2195': (0)
Wed, 08 Jun 2011 15:05:48 +0200 ApnsPHP[21724]: INFO: Retry to connect (3/3)...
Wed, 08 Jun 2011 15:05:49 +0200 ApnsPHP[21724]: INFO: Trying ssl://gateway.sandbox.push.apple.com:2195...
Fatal error: Uncaught exception 'ApnsPHP_Exception' with message 'Unable to connect to 'ssl://gateway.sandbox.push.apple.com:2195': (0)' in /home/xxxx/xxxxx/ApnsPHP/Abstract.php:354
答案 0 :(得分:17)
这个解决方案对我有用。原始答案在Push notifications server implementation -
我找到了一个解决方案,我不知道它是否是最好的,但它确实有效。在Abstract.php(这个文件是apns-php源码的一部分)我已经评论了第343行。现在它看起来像这样:
$streamContext = stream_context_create(array('ssl' => array(
//'verify_peer' => isset($this->_sRootCertificationAuthorityFile),
'cafile' => $this->_sRootCertificationAuthorityFile,
'local_cert' => $this->_sProviderCertificateFile
)));
我真的不知道这一行有什么意义,但知道推送通知正常。
答案 1 :(得分:8)
我的情况我更改了第58行和第59行文件ApnsPHP / Push.php
这个
protected $_aServiceURLs = array(
'ssl://gateway.push.apple.com:2195', // Production environment
'ssl://gateway.sandbox.push.apple.com:2195' // Sandbox environment
); /< @type array Service URLs environments. */
的
同
protected $_aServiceURLs = array(
'gateway.push.apple.com:2195', // Production environment
'gateway.sandbox.push.apple.com:2195' // Sandbox environment
); /
强> < @type array Service URLs environments. */
答案 2 :(得分:4)
您可能会检查是否安装了正确的证书。请查看以下网址:https://code.google.com/p/apns-php/wiki/CertificateCreation以生成“entrust_root_certification_authority.pem”文件。
您可以通过在sample_push.php上注释以下行来跳过证书验证:
//$push->setRootCertificationAuthority('entrust_root_certification_authority.pem');
希望它有所帮助。问候。
答案 3 :(得分:0)
请检查apple doc中指定的端口。 您必须打开提供商端系统上的端口。
答案 4 :(得分:0)
我得到了同样的错误。我谷歌了很多,并按照本指南的每一步,确保我的pem文件正确生成: https://code.google.com/p/apns-php/wiki/CertificateCreation
然后我运行以下命令来检查apns的安全链接是否正确:
openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert apns-dev-cert.pem -key apns-dev-key.pem -CApath /etc/ssl/certs/Entrust_Root_Certification_Authority.pem
按回车键,我收到了这个提示:
Enter pass phrase for apns-dev-key.pem:
然后我意识到我忘了为证书设置密码(在我的情况下是dev.pem)
// Instantiate a new ApnsPHP_Push object
$this->push = new ApnsPHP_Push(
ApnsPHP_Abstract::ENVIRONMENT_SANDBOX,
'dev.pem'
);
// Set the Provider Certificate passphrase
$this->push->setProviderCertificatePassphrase($passphrase);
// Set the Root Certificate Autority to verify the Apple remote peer
$this->push->setRootCertificationAuthority('entrust_root_certification_authority.pem');
// Connect to the Apple Push Notification Service
$this->push->connect();
// Instantiate a new Message with a single recipient
$this->message = new ApnsPHP_Message($deviceToken);
为apns pem设置正确的密码,问题解决了。
答案 5 :(得分:0)
我有同样的问题,我做错了是为SSL客户端身份验证和根CA提供相同的证书,下面代码为我工作
$push = new ApnsPHP_Push(
ApnsPHP_Abstract::ENVIRONMENT_SANDBOX,
'ck.pem'
);
$push->setRootCertificationAuthority('entrust_root_certification_authority.pem');
答案 6 :(得分:0)
开发人员需要以不同方式导出APNS证书及其密钥。如果两者都一次性导出,则会出现此错误。