向Android发送推送通知使用PHP:curl失败

时间:2016-01-07 06:32:05

标签: php android curl

我正在尝试使用存储在数据库表中的注册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服务器中不起作用。

2 个答案:

答案 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证书。