我们有市场多供应商/卖家 magento 网站。我们正在为网站做 Android 应用....
我们在网站上使用自定义送货方式。
此送货方式基于“卖家”& “买方”压缩代码。我们在后端保存卖家邮政编码。我们根据后端的距离设定运费。一旦买方在送货地址输入邮政编码,它将根据距离计算卖方和买方之间的运费。
这在网站上运行良好。
但在Android应用中,我们正在调用此API来获取送货方式: shoppingCartShippingList()
我们正在收取送货方式,但我们收取运费为零。 在下面的代码中,我可以看到,运输方法将使用
设置$quote->getShippingAddress()->setShippingMethod($shippingMethod);
对于此送货方式,APP的配方工作是否相同,因为它基于邮政编码?
要在App中使用此功能,我们必须更改以下代码中的任何内容,因为应用完全依赖于API .....
/app/code/core/Mage/Checkout/Model/Cart/Shipping/APi.php
<?php
class Mage_Checkout_Model_Cart_Shipping_Api extends Mage_Checkout_Model_Api_Resource
{
public function __construct()
{
$this->_ignoredAttributeCodes['quote_shipping_rate'] = array('address_id', 'created_at', 'updated_at', 'rate_id', 'carrier_sort_order');
}
/**
* Set an Shipping Method for Shopping Cart
*
* @param $quoteId
* @param $shippingMethod
* @param $store
* @return bool
*/
public function setShippingMethod($quoteId, $shippingMethod, $store = null)
{
$quote = $this->_getQuote($quoteId, $store);
$quoteShippingAddress = $quote->getShippingAddress();
if(is_null($quoteShippingAddress->getId()) ) {
$this->_fault("shipping_address_is_not_set");
}
$rate = $quote->getShippingAddress()->collectShippingRates()->getShippingRateByCode($shippingMethod);
if (!$rate) {
$this->_fault('shipping_method_is_not_available');
}
try {
$quote->getShippingAddress()->setShippingMethod($shippingMethod);
$quote->collectTotals()->save();
} catch(Mage_Core_Exception $e) {
$this->_fault('shipping_method_is_not_set', $e->getMessage());
}
return true;
}
/**
* Get list of available shipping methods
*
* @param $quoteId
* @param $store
* @return array
*/
public function getShippingMethodsList($quoteId, $store=null)
{
$quote = $this->_getQuote($quoteId, $store);
$quoteShippingAddress = $quote->getShippingAddress();
if (is_null($quoteShippingAddress->getId())) {
$this->_fault("shipping_address_is_not_set");
}
try {
$quoteShippingAddress->collectShippingRates()->save();
$groupedRates = $quoteShippingAddress->getGroupedAllShippingRates();
$ratesResult = array();
foreach ($groupedRates as $carrierCode => $rates ) {
$carrierName = $carrierCode;
if (!is_null(Mage::getStoreConfig('carriers/'.$carrierCode.'/title'))) {
$carrierName = Mage::getStoreConfig('carriers/'.$carrierCode.'/title');
}
foreach ($rates as $rate) {
$rateItem = $this->_getAttributes($rate, "quote_shipping_rate");
$rateItem['carrierName'] = $carrierName;
$ratesResult[] = $rateItem;
unset($rateItem);
}
}
} catch (Mage_Core_Exception $e) {
$this->_fault('shipping_methods_list_could_not_be_retrived', $e->getMessage());
}
return $ratesResult;
}
}