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
精彩评论