dongyin2885 2010-05-27 16:23
浏览 28
已采纳

使用新的付款模块在Magento中加载购物车时,我收到一个我无法追踪的错误

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>
            </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.

  • 写回答

2条回答 默认 最新

  • dsj0312 2010-05-28 01:02
    关注

    (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
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?