2014-06-08 72 views
2

我正在使用Zurmo並嘗試使用REST API創建一個新帳戶。我精確地遵循了這個文檔:http://zurmo.org/wiki/rest-api-specification-accounts將所需參數作爲json數組傳遞。

這是我的PHP代碼:

公共職能actionCreateOrUpdate(){

 $params=$_POST; 
    $modelClassName=$this->getModelName(); 

    foreach ($params as $param) 

    { 
     if (!isset($param)) 
     { 
      $message = Zurmo::t('ZurmoModule', 'Please provide data.'); 
      throw new ApiException($message); 
     } 

      $r=$this->GetParam($param); 

      $res= array('status' => 'SUCCESS', 'data' => array($r)); 


      print_r(json_encode($res,true)); 

    } 

    }  

function GetParam ($param){ 
     $modelClassName=$this->getModelName(); 



     if (isset($param['mobile_id']) && !$param['mobile_id']=='' &&!$param['mobile_id']==null) 
     { $id=$param['mobile_id']; 

     $params=array(); 

      foreach ($param as $k => $v) { 

       if(!($k=='mobile_id')) { 

        $params[$k] = $v;} 



      } 
      if ($params=null){$message = Zurmo::t('ZurmoModule', 'Please provide data.'); 
      throw new ApiException($message);} 

     $tableName = $modelClassName::getTableName(); 
     $beans = ZurmoRedBean::find($tableName, "mobile_id = '$id'"); 

     if (count($beans) > 0) 
     { 
      $result = $this->processUpdate($id, $params); 
     }else{ 
      $result = $this->processCreate($params,$id); 
     } 
    } 

      return $result; 

    }  

的問題是,$ _ POST方法返回一個空數組。在調試時,我嘗試使用print_r($ _ POST),它也返回一個空數組。我也嘗試將參數作爲純文本傳遞並得到相同的結果。我試過$ _GET方法,它工作。我認爲問題出在$ _POST方法中,也許我需要在我的.php文件中更改某些內容。請有任何想法嗎?

+0

您能顯示請求嗎?如果'$ _GET'正在工作,而不是'$ _POST',那麼發送它時可能會缺少請求類型。 – BrainPicker

+0

請求類型是REST。我也嘗試使用HTTPRequester,但它給出了相同的結果:( – user3640056

回答

1

你應該先用靜態數據命中api,檢查它是否正常工作,然後嘗試將php集成到靜態數據中。您需要閱讀哪些操作接受哪種格式的文檔,以及支持哪種方法(GET OR POST)。然後嘗試die();,發送之前,如果數組形成是根據文檔。

+0

其實我試着用靜態數據來打開api,它工作正常並且我實現的方法支持POST。謝謝你的建議。 – user3640056

0

我在使用來自java客戶端的REST API創建帳戶時遇到過類似的問題。問題是我沒有發送正確的POST請求。 另一個症狀也是在服務器端print_r(file_get_contents("php://input"),true); php代碼返回了正確的請求數據。

具體的根本原因是:

  • 的Content-Type HTTP頭不是 「應用程序/ x WWW的形式進行了urlencoded」

  • 在POST請求中的值字段值不正確編碼(我用java.net.URLEncoder.encode方法來克服這一點)

修復這些後,它的工作。