ApnsPHP не может подключиться к Apple Gateway - PullRequest
12 голосов
/ 08 июня 2011

неожиданно сегодня появилась действительно странная ошибка, говорящая о том, что он не может подключиться к соответствующему шлюзу ... какие-либо предложения по исправлению?

Вот вывод логгера:

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

Ответы [ 7 ]

18 голосов
/ 02 августа 2011

Это решение сработало для меня.Оригинальный ответ: Реализация сервера push-уведомлений -

Я нашел решение, не знаю, лучшее ли оно, но оно работает.На Abstract.php (этот файл является частью источника apns-php) я прокомментировал строку 343. Теперь это выглядит так:

$streamContext = stream_context_create(array('ssl' => array(
//'verify_peer' => isset($this->_sRootCertificationAuthorityFile),
'cafile' => $this->_sRootCertificationAuthorityFile,
'local_cert' => $this->_sProviderCertificateFile
)));

Я действительно не знаю, в чем смысл этоголиния, но знайте, что push-уведомление работает правильно.

8 голосов
/ 31 августа 2016

В моем случае я изменяю строки 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 ); /<strong>< @type array Service URLs environments. */ С protected $_aServiceURLs = array( 'gateway.push.apple.com:2195', // Production environment 'gateway.sandbox.push.apple.com:2195' // Sandbox environment ); /</strong>< @type array Service URLs environments. */

4 голосов
/ 07 мая 2013

Вы можете проверить, установлены ли у вас нужные сертификаты. Просмотрите этот URL: https://code.google.com/p/apns-php/wiki/CertificateCreation для создания файла entrust_root_certification_authority.pem.

Вы можете пропустить проверку сертификата, прокомментировав следующую строку в sample_push.php:

    //$push->setRootCertificationAuthority('entrust_root_certification_authority.pem');

Надеюсь, что это поможет. С уважением.

0 голосов
/ 21 июля 2017

Разработчику необходимо экспортировать сертификат APNS и его ключ по-разному.Если оба экспортируются за один раз, то эта ошибка возникнет.

0 голосов
/ 11 августа 2014

У меня была та же проблема, и я ошибся, предоставив один и тот же сертификат для аутентификации клиента SSL и корневого центра сертификации, для меня работал следующий код

$push = new ApnsPHP_Push(
        ApnsPHP_Abstract::ENVIRONMENT_SANDBOX,
        'ck.pem'
    );

$push->setRootCertificationAuthority('entrust_root_certification_authority.pem');

https://code.google.com/p/apns-php/wiki/CertificateCreation

0 голосов
/ 07 июля 2014

Я получил ту же ошибку.Я много гуглю и следую всем шагам этого руководства, чтобы убедиться, что мой файл 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, и я получил это приглашение:

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, проблема решена.

0 голосов
/ 15 июня 2011

Пожалуйста, проверьте порты, указанные в документе AppleВы должны открыть порты в системе на стороне вашего провайдера.

...