如何检索推送通知php的ck.pem文件


how to retrieve ck.pem file for push notifications php

嗨,我在从cron作业调用的php脚本发送推送通知时遇到问题。然而,当我从终端调用脚本时,同样的脚本也能工作,所以我知道检索ck.pem有问题

$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);

获取ck.pem,它可以工作,因为ck.pem文件就在我的桌面和本地。当我点击cron作业调用的脚本时,它在本地没有ck.pem文件,所以我将ck.pem上传到服务器,这样从cron作业中调用的php脚本就可以访问它,这是我用来检索它的代码

$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', file_get_contents("http://www.website.com/Certificates/ck.pem"));
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);

但是我得到错误

PHP警告:stream_socket_client():无法启用加密

PHP警告:stream_socket_client():无法连接到ssl://gateway.sandbox.push.apple.com:2195(未知错误)

PHP警告:stream_socket_client():SSL操作失败,返回代码1.OpenSSL错误消息:

所有这些错误都发生在以下段的第三行代码上:

$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;

所以就像我说的,我很确定这是因为ck.pem文件,我确保端口2195和2196是打开的,所以不是这样,我不明白这一点。如有任何帮助或建议,我们将不胜感激!

用这个堆栈溢出链接解决了这个问题:当使用crontab调度器时,iOS推送通知不起作用

我以错误的方式检索ck.pem文件