我正在尝试使用存储在数据库表中的注册ID发送一些Android设备的推送通知。
这是我的代码
//message and title for push notification
$msg=$_POST['message'];
$title=$_POST['title'];
$result=$connect->prepare("SELECT `push_id` FROM `user_devices`");
$result->execute();
//get registration id's
$ids=$result->fetchAll(PDO::FETCH_COLUMN);
$key="XXXXX";
$url = 'https://android.googleapis.com/gcm/send';
$fields = array(
'registration_ids' =>$ids,
'data' => array( "message" =>$msg,"title"=>$title,"soundname"=>"beep.wav" ),
);
$headers = array(
'Authorization: key=' . $key,
'Content-Type: application/json'
);
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_POST, true );
curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode( $fields ) );
$res = curl_exec($ch);
if($res === false)
echo 'Curl failed ' .curl_error();
}
我收到curl Failed
错误消息但没有看到curl_error()中的任何内容。
更新
我从windows服务器运行此脚本,该服务器托管在azure云服务中。 现在我从基于linux的服务器运行它,它的工作正常,但它在Windows服务器中不起作用。
答案 0 :(得分:1)
由于SSL(在您的网址https中)问题,您可能会收到错误。您必须配置curl来处理安全请求。您可以在此处找到提示:Configuring cURL for SSL
您没有收到错误消息,因为您需要打印它,如下所示:
echo 'Curl failed ' .curl_error($ch); // you are missing $ch here
或者,您可以在启用详细信息的情况下运行curl,以查看curl请求中发生的事情!
curl_setopt( $ch, CURLOPT_VERBOSE, true );
答案 1 :(得分:0)
这是我的SSL证书的问题。
使用一行代码解决
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
位于curl_init之后。
注意强>
这是一个临时解决方案。实际方法是生成SSl证书。