Вот код, который я использую
<?php $deviceToken = 'my device key'; // not putting in for security $payload['aps'] = array('alert' => 'This is the alert text', 'badge' => 1, 'sound' => 'default'); $payload = json_encode($payload); $apnsHost = 'gateway.sandbox.push.apple.com'; $apnsPort = 2195; $apnsCert = 'apns-dev.pem'; $streamContext = stream_context_create(); stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert); $apns = stream_socket_client('ssl://' . $apnsHost . ':' . $apnsPort, $error, $errorString, 2, STREAM_CLIENT_CONNECT, $streamContext); $apnsMessage = chr(0) . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $deviceToken)) . chr(0) . chr(strlen($payload)) . $payload; fwrite($apns, $apnsMessage); socket_close($apns); fclose($apns); ?>
и я получаю эти ошибки
Предупреждение: stream_socket_client () [function.stream-socket-client]: невозможно установить файл приватного ключа `apns-dev.pem 'в /home/bryan/sendpush.php в строке 14
Предупреждение: stream_socket_client () [function.stream-socket-client]: не удалось создать дескриптор SSL в /home/bryan/sendpush.php в строке 14
Предупреждение: stream_socket_client () [function.stream-socket-client]: Не удалось включить криптографию в /home/bryan/sendpush.php в строке 14
Предупреждение: stream_socket_client () [function.stream-socket-client]: невозможно подключиться к ssl: //gateway.sandbox.push.apple.com: 2195 (Неизвестная ошибка) в /home/bryan/sendpush.php в строке 14
Предупреждение: аргумент fwrite (): поставляемый аргумент не является допустимым ресурсом потока в /home/bryan/sendpush.php в строке 17
Предупреждение: socket_close () ожидает, что параметр 1 будет ресурсом, boolean указан в /home/bryan/sendpush.php в строке 19
Предупреждение: fclose (): предоставленный аргумент не является допустимым ресурсом потока в /home/bryan/sendpush.php в строке 20
На самом деле я довел до этих ошибок
Предупреждение: stream_socket_client () [function.stream-socket-client]: операция SSL завершилась неудачей с кодом 1. OpenSSL Сообщения об ошибках: ошибка: 14094410: процедуры SSL: SSL3_READ_BYTES: сбой вызова рукопожатия sslv3 в /home/bryan/PushService.php on line 27
Предупреждение: stream_socket_client () [function.stream-socket-client]: Не удалось включить криптографию в /home/bryan/PushService.php в строке 27
Предупреждение: stream_socket_client () [function.stream-socket-client]: невозможно подключиться к ssl: //gateway.sandbox.push.apple.com: 2195 (Неизвестная ошибка) в /home/bryan/PushService.php on line
Используйте абсолютный путь для закрытого ключа вместо относительного пути.
Убедитесь, что пользователю php (или пользователю веб-сервера, в зависимости от www-data
, apache
, nginx
, www
…) разрешено читать его ( chown
, chmod
).
Я тоже получал эту ошибку. выяснили, что я неправильно установил разрешение в папке с файлом сертификата. Это сработало для меня:
chmod 755 your_folder_that_has_certificate_files