2012-01-19 13 views
3

Magento配送方法モジュールを開発しました。 リモートサービスから利用可能な配送方法のリストを取得できますが、srviceなどへの接続に問題がある場合はエラーメッセージが表示されます。 collectRatesキャリアクラスのコードを以下に示します。Magentoチェックアウトページ(配送方法の段階)でエラーメッセージを作成

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モジュール)とこれらのモジュールのエラーハンドラも動作しないことを確認しました。エラーメッセージが表示されません。

この問題の解決策を教えてください。

Tank you!

+0

? http://www.firephp.org/を使用することをお勧めします。そうすれば、 'Mage :: helper(' firephp ') - > debug($ var);というテキストまたは環境変数を吐き出すことができます。 –

+0

メインテンプレート(1column.phtml、2columns-left.phtmlなど)に<?php echo $ this-> getChildHtml( 'global_messages')?>がありますか? – Anthony

答えて

2

コードは良好です。キャリアが常にその方法を表示するには、ちょっとした設定が必要です。

がMage_Shipping_Model_Shipping-> collectCarrierRates()(ライン176)に示されている結果がエラーである場合、Magentoのは(それは0と評価された場合、それを捨てて)あなたのキャリア設定の 'showmethod' のチェック:

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> 
+0

ところで、コードを少し改善することができます。 require_once Mage :: getBaseDir()を置き換える必要があります。 '/app/code/local/Citymail/CitymailDeliveryOption/lib/syvo_service_connect.php'; と require_once dirname(__ FILE__)。 '../lib/syvo_service_connect.php'; あなたのモジュールがアプリケーション/コード/ローカルでロックされないようにするには もう1つのことはあなたのキャリア内で $ this-> getConfigData( 'handling');を使用する必要があります。 の代わりに Mage :: getStoreConfig( 'キャリア/' .$ this - > _ code。 '/ handling'); – JBreton

+0

JBretonあなたの答えは私のために働く、ありがとう – Unknown

関連する問題