При загрузке корзины покупок в Magento с новым модулем оплаты появляется ошибка, которую я не смог отследить - PullRequest
2 голосов
/ 27 мая 2010

Я пытаюсь добавить новый модуль оплаты в Magento. Тем не менее, даже после комментирования подавляющего большинства кода, я все равно получаю следующую ошибку:

Fatal error: Call to a member function isAvailable() on a non-object in /var/www/html/app/code/core/Mage/Payment/Helper/Data.php  on line 71

Я использую Magento 1.4.0.1 и отключил кеш. Я даже на всякий случай опустошил кеш несколько раз.

Единственный код, который в настоящее время не закомментирован, основан на руководствах здесь и здесь .

Ошибка возникает, когда корзина загружается либо из области администрирования, либо из внешнего интерфейса.

Есть ли кто-нибудь, кто сталкивался с подобной проблемой? Я бы отправил код, но я не уверен, что нужно публиковать.

Спасибо за помощь.


Редактировать

приложение / и т.д. / модули / CPAP_All.xml

<?xml version="1.0"?>
<config>
    <modules>
        <CPAP_AuthorizeCim>
            <active>true</active>
            <codePool>local</codePool>
        </CPAP_AuthorizeCim>
    </modules>
</config>

Приложение / код / ​​местные / CPAP / AuthorizeCim / и т.д. / config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <CPAP_AuthorizeCim>
            <version>0.1.0</version>
        </CPAP_AuthorizeCim>
    </modules>
    <global>
        <models>
            <authorizecim>
                <class>CPAP_AuthorizeCim_Model</class>
            </authorizecim>
        </models>
        <resources>
            <authorizecim_setup>
                <setup>
                    <module>CPAP_AuthorizeCim</module>
                </setup>
                <connection>
                    <use>core_setup</use>
                </connection>
            </authorizecim_setup>
            <authorizecim_write>
                <connection>
                    <use>core_write</use>
                </connection>
            </authorizecim_write>
            <authorizecim_read>
                <connection>
                    <use>core_read</use>
                </connection>
            </authorizecim_read>
        </resources>
    </global>
    <default>
        <payment>
            <authorizecim>
                <active>0</active>
                <model>authorizecim/paymentmethod</model>
                <order_status>pending</order_status>
                <cctypes>AE,VI,MC,DI</cctypes>
                <login backend_model="adminhtml/system_config_backend_encrypted"/>
                <trans_key backend_model="adminhtml/system_config_backend_encrypted"/>
                <payment_action>authorize</payment_action>
                <allowspecific>0</allowspecific>
            </authorizecim>
        </payment>
    </default>
</config>

Приложение / код / ​​местные / CPAP / AuthorizeCim / Модель / Paymentmethod.php

class CPAP_AuthorizeCim_Model_Authorizenet
{
}

Если я закомментирую <model>authorizecim/paymentmethod</model> из config.xml, то ошибка исчезнет, ​​но мой способ оплаты не будет отображаться в качестве параметра в корзине.

Ответы [ 2 ]

2 голосов
/ 28 мая 2010

(заранее наполовину извиняюсь за собственные ссылки в этом посте, но я, кажется, (по крайней мере пока) неофициальное руководство разработчика Magento)

Это код, который вызывает у вас проблемы (в указанном выше файле Data.php)

if (!$model = Mage::getStoreConfig($prefix . 'model', $store)) {
    // Mage::Log('could not get model for ' . $prefix);
    continue;
}

$methodInstance = Mage::getModel($model);
if (!$methodInstance->isAvailable($quote)) {
    // Mage::Log($model . ' is not avaiablable' );
    /* if the payment method can not be used at this time */
    continue;
}

Magento ищет системную конфигурацию для имени класса или пути в стиле URI для использования в вызове getModel, который создает экземпляр модели.

$methodInstance = Mage::getModel('authorizecim/paymentmethod');

Итак, ваша проблема в том, что метод authorizecim / payment не разрешает имя класса Magento, как это должно быть. (если вы не выполните это, попробуйте (вкладка поиска класса / URI в демоверсии Commerce Bug ).

Итак, метод authorizecim / payment будет преобразован в имя класса

CPAP_AuthorizeCim_Model_Paymentmethod

authorizecim == look in config for this name in the <models /> section 
and use it's value as a basename (CPAP_AuthorizeCim_Model)

paymentmethod = append this with underscore word upper casing
(Paymentmethod) and append to above string to give us 
CPAP_AuthorizeCim_Model_Paymentmethod

Итак, Magento приказывает PHP создать экземпляр CPAP_AuthorizeCim_Model_Paymentmethod. Однако этот класс не загружен в память, поэтому __autoload вступает во владение и загружает файл в

CPAP/AuthorizeCim/Model/Paymentmethod.php

Какой у вас PHP-файл, который приводит нас к вашей проблеме. Ваш класс называется

CPAP_AuthorizeCim_Model_Authorizenet

когда его нужно назвать

CPAP_AuthorizeCim_Model_Paymentmethod
2 голосов
/ 27 мая 2010

Похоже, вы добавили в конфигурацию (возможно, в файле config.xml модуля), чтобы включить новый способ оплаты. Magento пытается загрузить класс для вашего метода оплаты, но поскольку требуемый класс не существует, происходит ошибка. Пожалуйста, предоставьте внесенные вами изменения XML и любые новые модели, которые вы определили как часть модуля.

Спасибо! Джо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...