我正在使用Zurmo并尝试使用REST API创建一个新帐户。我精确地遵循了这个文档:http://zurmo.org/wiki/rest-api-specification-accounts将所需的参数作为json数组传递。
这是我的PHP代码:
public function 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 :(得分:1)
你应该首先使用静态数据命中api,检查它是否正常工作,然后尝试将php集成到静态数据中。您需要阅读哪些操作接受哪种格式以及支持哪种方法的文档(GET OR POST
)。然后尝试die();
,然后在发送之前,如果形成的数组是按照文档。
答案 1 :(得分:0)
从java客户端使用REST API创建帐户时,我遇到了类似的问题。问题是我没有发送正确的POST请求。
另一个症状也是在服务器端print_r(file_get_contents("php://input"),true);
php代码返回了正确的请求数据。
具体根本原因是:
Content-Type HTTP标头不是" application / x-www-form-urlencoded"
POST请求中的值字段值未正确编码(我使用java.net.URLEncoder.encode方法来克服此问题)
修好后,它起作用了。