开发者

When loading shopping cart in Magento with a new Payment module, I get an error I haven't been able to trace

I am trying to add a new payment module into Magento. However, even after commenting out the vast majority of the code, I still get the following error:

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

I am using Magento 1.4.0.1, and have disabled the cache. I even emptied the cache several times just in case.

The only code currently not commented out is based on the tutorials here and here.

The error occurs when the cart is loaded either from the administration area or the front end.

Is there anyone out there that has run into a similar issue? I would post code, but I am not sure what needs to be posted.

Thanks for the assistance.


Edit

app/etc/modules/CPAP_All.xml

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

app/code/local/CPAP/AuthorizeCim/etc/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>
 开发者_C百科           </authorizecim>
        </payment>
    </default>
</config>

app/code/local/CPAP/AuthorizeCim/Model/Paymentmethod.php

class CPAP_AuthorizeCim_Model_Authorizenet
{
}

If I comment out <model>authorizecim/paymentmethod</model> from the config.xml, then the error goes away, but my payment option will not display as an option in the cart.


(Semi-appologies in advance for the self links in this post, but I seem to be (at least for now) the unofficial Magento developer's guide)

This is the code that's causing you your problems (in the Data.php file mentioned above)

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 is seaching the system config for either a class name, or a URI style path to use in the call to getModel, which instantiates the model.

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

So, your problem is that authorizecim/paymentmethod isn't resolving to a Magento classname like it's supposed to. (if you don't follow this try the (Class/URI lookup tab in the Commerce Bug demo).

So, authorizecim/paymentmethod is going to resolve to the classname

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

So, Magento tells PHP to instantiate a "CPAP_AuthorizeCim_Model_Paymentmethod". However, this class isn's loaded into memory, so the __autoload takes over and loads the file at

CPAP/AuthorizeCim/Model/Paymentmethod.php

Which is your PHP file, which brings us to your problem. Your class is named

CPAP_AuthorizeCim_Model_Authorizenet

when it needs to be named

CPAP_AuthorizeCim_Model_Paymentmethod


Looks like you've added to the config (probably in a module's config.xml file) to enable your new payment method. Magento is trying to load a class for your payment method, but because the class it wants doesn't exist, it is erroring out. Please provide the XML changes you've made and any new models you've defined as part of the module.

Thanks! Joe

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜