Php 流套接字客户端错误:无法将通知推送到移动电话
我刚刚设置了一个代码库,可以向iphone和android手机发送推送通知 它可以与index-notification.php配合使用,但不能与其他文件中的相同代码配合使用: 场景如下: 如果客户机为推送通知设置url链接,它将转到该链接并运行该链接,然后使用curl返回结果 有问题的外部url链接对具有经过认证的pem文件的手机执行真正的推送操作 当我单独使用这个文件时,它确实工作得很好 但是,当它像上面那样作为外部链接运行时,使用相同的设备令牌和pem文件将不再发生推送操作 你能帮我吗 下面是推送通知的代码Php 流套接字客户端错误:无法将通知推送到移动电话,php,wordpress,sockets,curl,push-notification,Php,Wordpress,Sockets,Curl,Push Notification,我刚刚设置了一个代码库,可以向iphone和android手机发送推送通知 它可以与index-notification.php配合使用,但不能与其他文件中的相同代码配合使用: 场景如下: 如果客户机为推送通知设置url链接,它将转到该链接并运行该链接,然后使用curl返回结果 有问题的外部url链接对具有经过认证的pem文件的手机执行真正的推送操作 当我单独使用这个文件时,它确实工作得很好 但是,当它像上面那样作为外部链接运行时,使用相同的设备令牌和pem文件将不再发生推送操作 你能帮我吗 下
function sendIOS_Push($message, $deviceToken, $pem, $pass, $env)
{
$passphrase = trim($pass);
$body['aps'] = array('alert' => $message,
'sound' => 'default',
);
// Encode the payload as JSON
$payload = json_encode($body);
$msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;
if($env == 'production') {
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', $pem);
if ($passphrase)
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
$fp = stream_socket_client('ssl://gateway.push.apple.com:2195', $err,
$errstr, 60, STREAM_CLIENT_CONNECT | STREAM_CLIENT_PERSISTENT, $ctx);
if (!$fp)
exit("Failed to connect: $err $errstr" . PHP_EOL);
$result = fwrite($fp, $msg, strlen($msg));
fclose($fp);
}
elseif($env == 'sandbox') {
//Desvelopment push
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', $pem);
if ($passphrase)
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
$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);
$result = fwrite($fp, $msg, strlen($msg));
fclose($fp);
}
return 1;
}
下面是向上述文件发送curl请求的代码
$data = array(
'devToken' => $tokenID,
'device' => strtolower($device),
'pass' => $pemPass,
'body' =>$msg,
'postID' =>$pRediredirectIDOrLink,
'type' =>$pushType,
'enviroment' => $enviroment,
'cert'=>"http://".$cert
);
$ch = curl_init();
if(get_option("amazingcart_ChooseHost") == 1)
{
curl_setopt($ch, CURLOPT_URL, "".get_bloginfo( 'url' )."/?scrollblogkruk=apns");
}
else if(get_option("amazingcart_ChooseHost") == 2)
{
curl_setopt($ch, CURLOPT_URL, "http://".get_option("amazingcart_externalServer")."");
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$output = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
我正在使用wordpress的amazingcart插件,amazingcart需要额外的url链接来推送通知,第一个代码段做了同样的事情,当我在一个独立的项目中使用它时,它工作正常,但当我将它作为一个curl请求引用时,它就不工作了(第二个代码段用于将curl发送到第一个代码段)最终解决了这个问题,它是关于推送通知的配置,我应该使用开发模式,而不是生产模式,它对我有效