2016-03-05 729 views
1

我想使用第三方服务器实现Android推送通知。 我有一个PHP脚本,其中包含一些CURL命令。 当我执行代码它给我错误: “无法解决主机:阵列” 在这里,我确认与托管网站,他们已经启动curl实施,它工作正常。所以看起来我的代码有问题。 我相对较新的PHP和卷曲脚本。请帮忙。 下面是我使用curl错误代码6:无法解析主机:数组

这里的代码,我想访问的网址是: http://android.googleapis.com/gcm/send

注:(这里我已经尝试使用HTTP和上面URL HTTPS,但问题依然存在。)

卷曲代码:

private function useCurl(&$model, $url, $headers, $fields = null) { 
      // Open connection 
      echo "::::::Inside CURL Function:::::::"; 
      $ch = curl_init(); 
      echo '::::::::::value of variable $ch:::::::::::' . $ch; 
      if ($url) { 
       // Set the url, number of POST vars, POST data 
       echo "::::::::Start of setting CURL Variables:::::::";  
       curl_setopt($ch, CURLOPT_URL, $url); 
       curl_setopt($ch, CURLOPT_POST, true); 
       curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
       curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
       echo ":::::::::End of setting CURL Variables::::::::"; 
       // Disabling SSL Certificate support temporarly 
       echo "::::::::Start of disabling SSL Certificates::::::::"; 
       curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
       if ($fields) { 
        curl_setopt($ch, CURLOPT_POSTFIELDS, $fields); 
       } 
       echo "::::::::End of disabling SSL Certificates:::::::::"; 
       // Execute post 
       echo ":::::::::Start of executing post request::::::::"; 
       $result = curl_exec($ch); 
       echo ":::::::::End of executing post request:::::::::::"; 
       if ($result === FALSE) { 
        die('Curl failed: ' . curl_error($ch) . curl_errno($ch)); 
       } 

       // Close connection 
       curl_close($ch); 

       return $result; 
     } 
    } 
+0

在函数内部执行'var_dump($ url);'看看它的值是什么。它看起来像一个数组越来越通过作为网址,它需要是一个字符串。 – drew010

+0

我得到了这一个....你是对的....我的$头被传递为一个数组....我在调用函数中将它作为json_enocde传递,它工作...但现在有一个新的错误....无法解析主机... [授权密钥= fkndfn .......] –

+0

似乎是类似的,现在看来'$ url'不是URL,而是头文件。参数是否以正确的顺序传递给函数? – drew010

回答

0

我得到了错误。我的代码有两个功能 1.其准备有效载荷和所需要的数据

  • 调用CURL功能
  • 下面是制备功能

    // Sends Push notification for Android users 
        public function android($data, $reg_id) { 
         echo "Inside pushnotification for Android Function::::::::"; 
          $url = 'http://android.googleapis.com/gcm/send'; 
          echo '::::::::::::URL Variable::::::::' . $url; 
          $message = array(
           'title' => $data['mtitle'], 
           'message' => $data['mdesc'], 
           'subtitle' => '', 
           'tickerText' => '', 
           'msgcnt' => 1, 
           'vibrate' => 1 
          ); 
          echo ':::::::::::::message Variable::::::::' . $message; 
          $headers = array(
           'Authorization: key=' .self::$API_ACCESS_KEY, 
           'Content-Type: application/json' 
          ); 
          echo ':::::::::::::headers Variable::::::::' . $headers; 
    
          $fields = array(
           'registration_ids' => array($reg_id), 
           'data' => $message, 
          ); 
          echo '::::::::::fields Variable::::::::' . $fields; 
          echo ':::::::::::::Start of CURL Call::::::::'; 
          //return $this->useCurl($url, $headers, json_encode($fields)); 
          return self::useCurl($url, json_encode($headers), json_encode($fields)); 
         } 
    
    代码
  • CURL功能

    //卷曲 私有函数我们eCurl($ url,$ headers,$ fields){ //打开连接 echo“:::::: Inside CURL Function :::::::”; $ ch = curl_init(); echo'::::::::::变量$ ch :::::::::::'的值。 $ CH; if($ url){ //设置网址,POST变量的数量,POST数据 echo“::::::::开始设置CURL变量:::::::”; echo'::::::::变量$ url :::::::'的值。 $网址;
    echo'::::::::变量$ headers :::::::'的值。 $头; echo'::::::::变量$ model :::::::'的值。 $模型; echo'::::::::变量$ fields :::::::'的值。 $领域;
    curl_setopt($ ch,CURLOPT_URL,$ url); curl_setopt($ ch,CURLOPT_POST,true); curl_setopt($ ch,CURLOPT_HTTPHEADER,$ headers); curl_setopt($ ch,CURLOPT_RETURNTRANSFER,true); echo“:::::::::设置CURL变量结束::::::::”; //暂时关闭SSL证书支持 echo“::::::::开始禁用SSL证书::::::::”; curl_setopt($ ch,CURLOPT_SSL_VERIFYPEER,false); if($ fields)curl_setopt($ ch,CURLOPT_POSTFIELDS,$ fields); } echo“::::::::终止禁用SSL证书:::::::::”; //执行发帖 echo“:::::::::开始执行发布请求::::::::”; $ result = curl_exec($ ch); echo“:::::::::执行post请求结束:::::::::::”; if($ result === FALSE){'curl failed:'。curl_error($ ch)。curl_errno($ CH)); }

     // Close connection 
         curl_close($ch); 
    
         return $result; 
    } 
    

    }

  • 两者都是经校正的功能

    以下是在更正:

    1. 在第一功能 旧值:

      return self :: useCurl($ url,$ headers,json_encode($ fields));

    新价值:

    return self::useCurl($url, json_encode($headers), json_encode($fields)); 
    

    原因:由于$头是一个数组,它应转换为使用json_encode一个JSON字符串。这解决了我在帖子中的第一个错误。

  • 在第二函数
  • 旧值:

    useCurl(&$model, $url, $headers, $fields = null) 
    

    新值:

    useCurl($url, $headers, $fields) 
    

    原因:这解决了我的第二误差,因为没有名为$ model的变量,所以调用函数中的url值在$ model中传递,其他值也是如此。

    现在,代码中没有错误。但尚未收到通知。 我怀疑$ headers字符串中有错误,因为它在我的API访问键之前连接了一些额外的值。一旦我能够解决,将尝试并复出。

    0

    这里是代码抛出错误=缺少注册gcm。

    public static function android($data, $reg_id) { 
        echo "Inside pushnotification for Android Function::::::::"; 
         $url = 'https://android.googleapis.com/gcm/send'; 
         //echo '::::::::::::URL Variable::::::::' . $url; 
         echo '::::::::::::data Variable::::::::' . json_encode($data); 
         echo '::::::::::::regid Variable::::::::' . json_encode($reg_id); 
         $message = array(
          'title' => $data['mtitle'], 
          'message' => $data['mdesc'], 
          'subtitle' => '', 
          'tickerText' => '', 
          'msgcnt' => 1, 
          'vibrate' => 1 
         ); 
         echo ':::::::::::::message Variable::::::::' . json_encode($message); 
         $headers = array(
          'Authorization:key=' .self::$API_ACCESS_KEY, 
          'Content-Type:application/json' 
    
    
         ); 
         echo ':::::::::::::headers Variable::::::::' . json_encode($headers); 
    
         $fields = array(
          'registration_ids' => $reg_id, 
          'data' => $message 
         ); 
         echo '::::::::::fields Variable::::::::' . json_encode($fields); 
         echo ':::::::::::::Start of CURL Call::::::::'; 
         //return $this->useCurl($url, $headers, json_encode($fields)); 
         //return self::useCurl($url, json_encode($headers), json_encode($fields)); 
    
          $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_SSL_VERIFYPEER, false); 
          if ($fields) { 
           curl_setopt($ch, CURLOPT_POSTFIELDS, $fields); 
          } 
    
    
           $result = curl_exec($ch); 
           // Close connection 
          curl_close($ch); 
    
           echo "::::::::::value of $result variable:::::::::::" . $result; 
    
        } 
    
    +0

    解决了这个问题,这里是正确的代码: –

    1

    解决了这个问题。这里是正确的工作代码:

    public static function android($data, $reg_id) { 
           $url = 'https://android.googleapis.com/gcm/send'; 
           //echo '::::::::::::URL Variable::::::::' . $url; 
    json_encode($reg_id); 
           $message = array(
            'title' => $data['mtitle'], 
            'message' => $data['mdesc'], 
            'subtitle' => '', 
            'tickerText' => '', 
            'msgcnt' => 1, 
            'vibrate' => 1 
           ); 
           $headers = array(
            'Authorization:key=' .self::$API_ACCESS_KEY, 
            'Content-Type:application/json' 
    
    
           ); 
    
           $fields = array(
            'registration_ids' => $reg_id, 
            'data' => $message 
           ); 
    
            $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_SSL_VERIFYPEER, false); 
            if ($fields) { 
             curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields)); 
            } 
    
    
             $result = curl_exec($ch); 
             // Close connection 
            curl_close($ch); 
    
             echo "::::::::::value of $result variable:::::::::::" . $result; 
    
          } 
    

    在这里,请确保您通过$ reg_id和$数据都作为php数组函数。 此主题可以关闭。

    +0

    这是我的工作 –

    相关问题