我试图发布数据,但我不断收到此错误“代码”:400,“消息”:“请求数据无效。”在Magento REST API上

时间:2013-12-26 14:12:59

标签: magento-1.7

我正在尝试发布一些数据,然后调用profPostAction来检查令牌,但是 _create函数根本就没有被读取,并且错误请求无效会一直显示,

protected function _create(array $data)
{
    $action = $this->getRequest()->getParam('action') . 'PostAction';
    if (method_exists($this, $action)) {
        Mage::app()->setCurrentStore(1);
        header("Content-type: application/json");
        die(json_encode($this->$action($data)));
    }

    $this->_critical('Bad request.', Mage_Api2_Model_Server::HTTP_BAD_REQUEST);
}

//尝试获取提供的令牌和数据以获取客户ID

protected function profPostAction($data)
{
    $token = $data['token'];
    if (!$token) {
        $this->_critical('Token is required.', Mage_Api2_Model_Server::HTTP_BAD_REQUEST);
    }

    $_token = Mage::getModel('grouponapi/token')->load(mysql_escape_string($token), 'token');
    if (!$_token->getId()) {
        $this->_critical('Token is not valid!', Mage_Api2_Model_Server::HTTP_FORBIDDEN);
    }

    $customer_id = $_token->getCustomerId();
    $_customer = Mage::getModel('customer/customer')->load($customer_id);
    if (!$_customer->getId()) {
        $this->_critical('Customer not found!', Mage_Api2_Model_Server::HTTP_NOT_FOUND);
    }
}

3 个答案:

答案 0 :(得分:0)

确保您已在api2.xml中定义了您尝试创建的实体的属性:

<attributes module="api2">
    <entity_id>ID</entity_id>
    <field1>Your Field 1</field1>
    <field2>Your Field 2</field2>
</attributes>

答案 1 :(得分:0)

这有点晚了但是大部分时间我们都会遇到这种类型的错误,如果在我的情况下我们没有在请求中发送标头我得到了这个错误,因为我没有发送标题 Content-Type Application / json 如果你正在测试你是在休息客户端上的api,那么在表单中手动(原始)编写你的数据(json)。它适用于我的情况。

答案 2 :(得分:0)

在我的情况下,我使用了PUT(_update)方法并传递了空的正文。 在Magento中,我发现更新请求的空主体无效:

case self::ACTION_TYPE_ENTITY . self::OPERATION_UPDATE:
    $this->_errorIfMethodNotExist('_update');
    $requestData = $this->getRequest()->getBodyParams();
    if (empty($requestData)) {
        $this->_critical(self::RESOURCE_REQUEST_DATA_INVALID);
    }
    $filteredData = $this->getFilter()->in($requestData);
    if (empty($filteredData)) {
        $this->_critical(self::RESOURCE_REQUEST_DATA_INVALID);
    }
    $this->_update($filteredData);
    break;