我制作了一个休息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());
我不知道为什么响应变为空,即使我删除了函数的所有内容并只返回一个值,它也是空的。
有什么好主意吗?
答案 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){
....