magento rest api create method return

时间:2013-12-04 18:17:26

标签: magento rest

我制作了一个休息api模块,用于运输和订购运营商和跟踪代码。 问题是当我调用方法_created() - (Post)时它不会返回任何值。我不知道函数是否允许返回。

这是我的创建功能

protected function _create($orderData)
{
    $orderId = $this->getRequest()->getParam('order_id');

    if($orderData['incrementId']){
        $incrementId =  $orderData['incrementId'];
    }else{
        $cModel = Mage::getModel('sales/resource_order');
        $incrementId = $cModel->getIncrementId($orderId);
    }

    $order = Mage::getModel('sales/order')
        ->getCollection()
        ->addAttributeToFilter('state', array('neq' => Mage_Sales_Model_Order::STATE_CANCELED))
        ->addAttributeToFilter('increment_id', $incrementId)
        ->getFirstItem();

    if ($order->hasData()) {

        if($order->canShip()){
            $shipment = new Mage_Sales_Model_Order_Shipment_Api();
            $shipmentId = $shipment->create($incrementId);
            $trackid = $shipment->addTrack($shipmentId, 'custom', 'ups', '#111111' );
            return $shipmentId;
        }else{
            $this->_critical(self::RESOURCE_NOT_FOUND);
        }

    }else{
        $this->_critical(self::RESOURCE_NOT_FOUND);
    }

    //return null;
}

api电话:

$resourceUrl = "$apiUrl/shipping/order/1?type=rest";
$oauthClient->fetch($resourceUrl, json_encode($orderData), 'POST', $headers);
print_r($oauthClient->getLastResponse());

我不知道为什么响应变为空,即使我删除了函数的所有内容并只返回一个值,它也是空的。

有什么好主意吗?

2 个答案:

答案 0 :(得分:1)

答案R.S表示是针对SOAP而不是REST。你的定义是正确的。 返回create是一个URL,它将出现在http标题“location”中。它不是显示_create事件响应的有效方法。如果您想回复某些内容,则应使用_multicreate

如果你想在_multicreate中添加响应数据,你应该使用

$this->getResponse ()->addMessage ( "", 0, array (
            'id' => $quote->getId () 
    ), Mage_Api2_Model_Response::MESSAGE_TYPE_SUCCESS );

您应该在位置检索URL以接收正确的内容。

使用此代码正确获取网址。

$this->_getLocation ( $quote )

另一个棘手的问题是你可以设置标题以强制重定向

$this->getResponse ()->setRawHeader ( '"Content-Type" = "application/json"' );

但是,此时,只有在您的域的根目录中安装magento,或者url才会出错。

因此,你可以使用一些不好的代码但让事情有效。

最终代码是

$this->getResponse ()->setRawHeader ( '"Content-Type" = "application/json"' );
$base_url = Mage::getBaseUrl ( Mage_Core_Model_Store::URL_TYPE_WEB );
$base_url = substr ( $base_url, 0, strlen ( $base_url ) - 1 );
return $base_url . $this->_getLocation ( $order );

答案 1 :(得分:0)

看看@ Creating a custom API or extending the Core API

你的创建方法不应该是

public function create($customerData){
  ....