2016-10-21 43 views
1

默認情況下,Magento的Order REST API不會提交用於訂單(數據庫中的customer_balance_amount col)的商店信用額度。我需要將其暴露給API接口,但截至目前無法。我嘗試兩種方法:將customer_balance_amount添加到Magento 2的Order REST API

http://magehit.com/blog/how-to-get-value-of-custom-attribute-on-magento-2-rest-api/ - 使用觀測,但似乎並沒有對API數據

http://www.ipragmatech.com/extend-magento2-rest-api-easy-steps/任何反思 - 這是我成功的嘗試,但它涉及真正創建一個新的ednpoint,而不是覆蓋/擴展當前的API。

我實際上能夠通過直接更改模塊銷售核心模塊內的OrderInterface和Order模型來重現此問題,但我希望實現這種「正確」方式而不是修改核心。

如果有人分享一些知識如何做到這一點,我會很感激。

編輯:補充說,做出的解決方案使用的代碼,但我們的目標是讓它正確的方式,而不是編輯核心文件,像這樣:

供應商/ Magento的/模塊的銷售/原料藥/數據/ OrderInterface.php:

/* 
* Customer Balance Amount 
*/ 
const CUSTOMER_BALANCE_AMOUNT = 'customer_balance_amount'; 


/** 
* Returns customer_balance_amount 
* 
* @return float Customer Balance Amount 
*/ 
public function getCustomerBalanceAmount(); 


/** 
* Sets the customer_balance_amount for the order. 
* 
* @param float $amount 
* @return $this 
*/ 
public function setCustomerBalanceAmount($amount); 

供應商/ Magento的/模塊的銷售/模型/ Order.php:

/** 
* Returns customer_balance_amount 
* 
* @return float 
*/ 
public function getCustomerBalanceAmount() 
{ 
    return $this->getData(OrderInterface::CUSTOMER_BALANCE_AMOUNT); 
} 


/** 
* Sets the customer_balance_amount for the order. 
* 
* @param float $amount 
* @return $this 
*/ 
public function setCustomerBalanceAmount($amount) 
{ 
    return $this->setData(OrderInterface::CUSTOMER_BALANCE_AMOUNT, $amount); 
} 

問候, 亞歷克斯

+1

鏈接得到的代碼很好,但你需要在你的問題中包含相關的代碼 – Machavity

+0

@Machavity謝謝你的評論。我添加了一個實際可行的示例代碼,但是通過直接修改內核,所以我的問題是如何以「正確的方式」執行此操作。 –

回答

1

它看起來像這其實是一個錯誤,因爲Magento的確實定義餘額列作爲擴展的供應商/ Magento的/模塊的客戶平衡的/ etc/extension_attributes.xml

屬性望着GiftMessage模塊,方式要做到這一點是通過一個插件。

供應商/ Magento的/模塊禮品消息的/ etc/di.xml

<type name="Magento\Sales\Api\OrderRepositoryInterface"> 
    <plugin name="save_gift_message" type="Magento\GiftMessage\Model\Plugin\OrderSave"/> 
    <plugin name="get_gift_message" type="Magento\GiftMessage\Model\Plugin\OrderGet"/> 
</type> 

\ Magento的\ GiftMessage \型號\插件\ OrderGet到您

/** 
* Get gift message for order 
* 
* @param \Magento\Sales\Api\Data\OrderInterface $order 
* @return \Magento\Sales\Api\Data\OrderInterface 
*/ 
protected function getOrderGiftMessage(\Magento\Sales\Api\Data\OrderInterface $order) 
{ 
    $extensionAttributes = $order->getExtensionAttributes(); 
    if ($extensionAttributes && $extensionAttributes->getGiftMessage()) { 
     return $order; 
    } 

    try { 
     /** @var \Magento\GiftMessage\Api\Data\MessageInterface $giftMessage */ 
     $giftMessage = $this->giftMessageOrderRepository->get($order->getEntityId()); 
    } catch (NoSuchEntityException $e) { 
     return $order; 
    } 

    /** @var \Magento\Sales\Api\Data\OrderExtension $orderExtension */ 
    $orderExtension = $extensionAttributes ? $extensionAttributes : $this->orderExtensionFactory->create(); 
    $orderExtension->setGiftMessage($giftMessage); 
    $order->setExtensionAttributes($orderExtension); 

    return $order; 
}