代码之家  ›  专栏  ›  技术社区  ›  Joseph

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

  •  2
  • Joseph  · 技术社区  · 16 年前

    我正在尝试将一个新的支付模块添加到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,并已禁用缓存。为了以防万一,我甚至清空了几次缓存。

    目前唯一没有注释掉的代码是基于教程 here here .

    从管理区域或前端加载购物车时发生错误。

    有没有人遇到过类似的问题?我会发布代码,但我不确定需要发布什么。

    谢谢你的帮助。


    编辑

    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
    {
    }
    

    如果我发表评论 <model>authorizecim/paymentmethod</model> 从config.xml中,错误消失,但我的付款选项不会显示为购物车中的选项。

    2 回复  |  直到 16 年前
        1
  •  2
  •   Alana Storm    16 年前

    (这篇文章中自我链接的半应用程序,但我似乎(至少现在)是非官方的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;
    }
    

    马根托正在 system config 用于调用getmodel(实例化模型)时要使用的类名或URI样式路径。

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

    所以,您的问题是authorizeCIM/paymentMethod并没有像预期的那样解析为magento类名。(如果不遵循此操作,请尝试 Commerce Bug 演示)。

    因此,authorizeCIM/paymentMethod将解析为类名

    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”。但是,这个类是加载到内存中的,因此uu autoload接管并加载文件

    CPAP/AuthorizeCim/Model/Paymentmethod.php
    

    这是您的php文件,这给我们带来了您的问题。你的班级叫

    CPAP_AuthorizeCim_Model_Authorizenet
    

    当需要命名时

    CPAP_AuthorizeCim_Model_Paymentmethod
    
        2
  •  2
  •   Joe Mastey    16 年前

    看起来您已经添加到配置(可能在模块的config.xml文件中)以启用新的支付方法。Magento正试图为您的付款方式加载一个类,但是因为它想要的类不存在,所以它出错了。请提供您所做的XML更改以及作为模块一部分定义的任何新模型。

    谢谢! 乔

    推荐文章