使用curl进行ios推送通知的php代码点火器
我已经创建了一个web服务,可以使用curl向ios发送推送通知, 我有用于开发的ck.pem文件,其中包含cert和RSA私钥,并正确引用它 但每次我调用web服务时,都会出现相同的错误 Curl失败:无法使用客户端证书(未找到密钥或密码短语错误?) 除了使用“stream\u context\u create”的替代方案之外,所有相关的解决方案都不起作用,但我想用curl和idk来解决这个问题 在下面找到我的代码:使用curl进行ios推送通知的php代码点火器,php,ios,codeigniter,curl,apple-push-notifications,Php,Ios,Codeigniter,Curl,Apple Push Notifications,我已经创建了一个web服务,可以使用curl向ios发送推送通知, 我有用于开发的ck.pem文件,其中包含cert和RSA私钥,并正确引用它 但每次我调用web服务时,都会出现相同的错误 Curl失败:无法使用客户端证书(未找到密钥或密码短语错误?) 除了使用“stream\u context\u create”的替代方案之外,所有相关的解决方案都不起作用,但我想用curl和idk来解决这个问题 在下面找到我的代码: function test_push_to_ios() { $url
function test_push_to_ios() {
$url = 'https://gateway.sandbox.push.apple.com:2195';
$cert = base_url() . 'backend_includes/ios_cert/ck.pem';
$gcm_ids = array("xxxxxx");
$passphrase = "passphrase";
$message = 'nbad_notification';
$aps = array('alert' => $message, 'sound' => 'default');
$fields = array('device_tokens' => $gcm_ids, 'data' => $message, 'aps' => $aps);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json"));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_SSLCERT, $cert);
//curl_setopt($ch, CURLOPT_SSLCERTPASSWD, $passphrase);
curl_setopt($ch, CURLOPT_SSLKEY, $cert);
curl_setopt($ch, CURLOPT_SSLKEYPASSWD, $passphrase);
curl_setopt($ch, CURLOPT_CERTINFO, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));
$result = curl_exec($ch);
if ($result === FALSE) {
die('Curl failed: ' . curl_error($ch));
}
curl_close($ch);
echo json_encode($result);
}
我没有仔细阅读你的问题 您正试图通过HTTPS请求向Apple发送推送通知。那不行。Apple推送通知仅适用于TCP协议上的特定二进制格式 作为提供商,您可以通过二进制接口与Apple推送通知服务进行通信。该接口是一个面向提供商的高速、高容量接口;它结合二进制内容使用流式TCP套接字设计。二进制接口是异步的 您的代码存在许多问题: 您似乎混合了GCM代码和APNS代码。
$fields=array('device\u tokens'=>$gcm\u id,'data'=>$message,'aps'=>$aps)
看起来与向Google云消息服务器发送消息时的操作类似。但是GCM和APN完全不同,所以为什么你认为这会起作用呢
您发送的是一个JSON正文,它与GCM一起工作,但APN使用二进制格式。虽然发送给APNS的二进制消息中的有效负载包含一个编码的JSON字符串(看起来类似于您的$aps
JSON),但您不能将其打包到另一个JSON中并期望它工作
在APNS服务器前面添加https://
无法使其支持https,因为它的实现不支持https(也不支持HTTP)
我建议您使用
stream\u context
,这很管用。不,我得到了带有证书和密钥的.pem文件,我尝试了使用stream\u context的其他示例,结果很管用。idk为什么不能使用curl,你试过我的代码了吗?@aemad我错了。我完全改变了我的答案。谢谢你提供的有用信息,虽然我不能让它工作,但我知道为什么