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

Posted

技术标签:

【中文标题】如何检索推送通知php的ck.pem文件【英文标题】:how to retrieve ck.pem file for push notifications php 【发布时间】:2016-05-03 18:36:40 【问题描述】:

您好,我无法从 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 是打开的,所以不是这样,我无法弄清楚。任何帮助或建议将不胜感激!

【问题讨论】:

【参考方案1】:

用这个堆栈溢出链接解决了这个问题:ios push notification does not work when using crontab scheduler

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

【讨论】:

以上是关于如何检索推送通知php的ck.pem文件的主要内容,如果未能解决你的问题,请参考以下文章

从 PHP 推送通知向 iOS 发送变量?

向 iOS 测试设备发送推送通知时出现 PHP 错误

来自服务器的 Apple 推送通知

推送通知不适用于生产

使用新的苹果面板生成推送通知 ssl 证书和配置以进行开发?

worklight中的推送通知,如何检索userId?