magento - 在 Magento 结帐页面上显示错误消息(运输方式阶段)

标签 magento module

我开发了一个 Magento 运输方法模块,它工作正常。 我可以从远程服务检索可用的运输方式列表,但如果与服务的连接等出现问题,我希望收到一条错误消息。 下面列出了collectRates运营商类的代码。

public function collectRates(Mage_Shipping_Model_Rate_Request $request) {
if (!$this->getConfigFlag('active')) {
  return false;
}

require_once Mage::getBaseDir() . '/app/code/local/Citymail/CitymailDeliveryOption/lib/syvo_service_connect.php';

$citymail_service_url = $this->getConfigData('service_url') . '/syvo_service';

$connection = new syvo_service_connect($citymail_service_url);
if($connection->connect()) {

  $handling = Mage::getStoreConfig('carriers/'.$this->_code.'/handling');
  $rate_result = Mage::getModel('shipping/rate_result');

  $product_qty = 0;
  $products_data = array();

  $currency = Mage::app()->getStore()->getCurrentCurrencyCode();

  $quote = Mage::getSingleton('checkout/session')->getQuote();
  foreach($quote->getAllVisibleItems() as $cartItem) {
    $product_qty += $cartItem->getQty();
    $products_data[$cartItem->getId()] = array(
      'length_units' => 'cm',
      'length' => 0,
      'width' => 0,
      'height' => 0,
      'weight_units' => 'kg',
      'weight' => $cartItem->getProduct()->getWeight(),
      'shippable' => 'a',
      'sell_price' => $cartItem->getProduct()->getPrice(),
      'currency' => $currency,
    );
  }

  $shipping_address = Mage::getModel('checkout/cart')->getQuote()->getShippingAddress();
  $password = md5($this->getConfigData('service_password'));
  $params = array(
     'passw=' . $password,
     'login=' . $this->getConfigData('service_login'),
     'action=get_shipping_options',
     'product_qty=' . $product_qty,
     'products_data=' . json_encode($products_data),
     'country=' . $shipping_address->getCountryId(),
     'postal_code=' . $shipping_address->getPostcode(),
   );


  $response = $connection->send(implode('&', $params), 0, 30);
  $response_status_line = $connection->getResponseStatusLine();
  if((int)$response_status_line[1] == 403) {
    //Access denied message
  }
  else {
    $response_array = json_decode($response);

    $citymail_service_points_data = array();
    if($response_array->syvo_service_responce->type == 'success') {
      $options = array();        
      foreach($response_array->syvo_service_responce->data->syvo_shipping_methods as $key_method => $shipping_method) {

        $method_key = 'opt--' . $shipping_method->type . '--' . $shipping_method->distributor;

        if($shipping_method->type == 'DHL_SERVICE_POINT') {
          $citymail_service_points_data['service_points'][$shipping_method->id] = array(
            'dhl_service_point_postcode' => $shipping_method->postcode,
            'dhl_service_point_address' => $shipping_method->address,
          );
          $method_key .= '--' . $shipping_method->id;
        }

        $method = Mage::getModel("shipping/rate_result_method");
        $method->setCarrier($this->_code);
        $method->setCarrierTitle(Mage::getStoreConfig('carriers/' . $this->_code . '/title'));
        $method->setMethod($method_key);
        $method->setMethodTitle($shipping_method->text);
        $method->setCost($shipping_method->rate);
        $method->setPrice($shipping_method->rate + $handling);
        $rate_result->append($method);
      }

      $street = $shipping_address->getStreet();
      $citymail_temporary_order_data = array(
        'login' => $this->getConfigData('service_login'),
        'password' => $password,
        'country_id' => $shipping_address->getCountryId(),
        'company_name' => $shipping_address->getCompany(),
        'name' => trim($shipping_address->getFirstname() . ' ' . $shipping_address->getLastname()),
        'postal_code' => $shipping_address->getPostcode(),
        'phone_number' => $shipping_address->getTelephone(),
        'email' => $shipping_address->getEmail(),
        'street' => $street[0],
        'city' => $shipping_address->getCity(),
        'matrix_id' => $response_array->syvo_service_responce->data->matrix_id,
        'service_url' => $citymail_service_url,
      );


      $citymail_temporary_order_data = $citymail_service_points_data + $citymail_temporary_order_data;
      Mage::getSingleton('core/session')->setCitymailTemporaryOrderData($citymail_temporary_order_data);


    }
    else {
      //Some error handler

      $error = Mage::getModel("shipping/rate_result_error");
      $error->setCarrier('citymaildeliveryoption');
      $error->setErrorMessage('sasasas');
      $rate_result->append($error);


    }
  }

}
else {

}


return $rate_result;
}

如果模块无法检索送货方式列表,此代码必须返回错误消息:

$error = Mage::getModel("shipping/rate_result_error");
$error->setCarrier('citymaildeliveryoption');
$error->setErrorMessage('sasasas');
$rate_result->append($error);

但是错误没有显示。 我检查了一个现有的(核心)Magento 模块,它也使用错误处理程序(Ups、Usps 模块),并且这些模块的错误处理程序也不起作用,错误消息不显示。

您能否建议解决此问题的一些方法。

打败你!

最佳答案

你的代码很好。您只需要进行一点配置即可让您的运营商始终显示其方法。

已在 Mage_Shipping_Model_Shipping->collectCarrierRates()(第 176 行)中显示,如果结果有错误,Magento 会检查承运商配置中的“showmethod”(如果结果为 0,则丢弃它):

if ($carrier->getConfigData('showmethod') == 0 && $result->getError()) {
    return $this;
}

所以你只需将其添加到你的 config.xml 中:

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <default>
        <carriers>
            <citymaildeliveryoption>
                <showmethod>1</showmethod>
            </citymaildeliveryoption>
        </carriers>
    </default>
</config>

关于magento - 在 Magento 结帐页面上显示错误消息(运输方式阶段),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8923279/

相关文章:

php - Magento 产品图片未显示在管理中

magento - 如何为每个类别添加不同的静态 block

Magento:获取给定产品的购物车数量

php - 在 Prestashop 版本 1.5.3 中的产品管理页面中添加新选项卡,如功能选项卡、属性选项卡等

angular - 具有延迟加载的多级模块不起作用

php - magento 1.5 产品评论存储在哪里?

powershell - 导入模块时出错

java - 如何在 Tomcat 中为 Spring 提供一个类?

perl - 我可以使用 MooseX::Declare 在类之外定义函数吗?

php - ZEND 获取邮件正文