0

我正在为与 Magento 和 quickbooks 的 T-Hub 集成设置一个沙盒。我已经使用 WAMP 服务器在本地设置了我的生活站点,现在开始尝试将本地 Magento 站点绑定到 T-hub。我收到的第一个错误表明

“与 Magento 商店的连接失败。服务身份验证失败 - 注意:未定义的索引:第 98 行 c:\wamp\www\testsite\appcode\core\mage\Core\Model\Session\Abtract\Varien.php 中的 httponly。”

经过一番搜索,我发现了一个普遍的共识是我必须在我的本地服务器上放置一个 ssl,完成,这个问题就消失了。现在我收到一条一般错误消息,简单地说

“与 Magento 的连接失败”

我使用了 atandra 包含在他们的文件中的测试页面,它返回了这个:

<RESPONSE Version="4.1">
<Envelope>
<Command>GETORDERS</Command>
<StatusCode>9001</StatusCode>
<StatusMessage>
 Service authentication failure - Warning: array_key_exists() expects parameter 2 to be array,      string given in C:\wamp\www\adamsarms\app\code\core\Mage\Captcha\Model\Observer.php on line 166
</StatusMessage>
<Provider>Magento</Provider>
</Envelope>
</RESPONSE>

回到这个是 php 文件:

public function checkUserLoginBackend($observer)
{
    $formId = 'backend_login';
    $captchaModel = Mage::helper('captcha')->getCaptcha($formId);
    $loginParams = Mage::app()->getRequest()->getPost('login', array());
    $login = array_key_exists('username', $loginParams) ? $loginParams['username'] : null;
    if ($captchaModel->isRequired($login)) {
        if (!$captchaModel->isCorrect($this->_getCaptchaString(Mage::app()->getRequest(), $formId))) {
            $captchaModel->logAttempt($login);
            Mage::throwException(Mage::helper('captcha')->__('Incorrect CAPTCHA.'));
        }
    }
    $captchaModel->logAttempt($login);
    return $this;
}

该行是它直接指向的行:

$login = array_key_exists('username', $loginParams) ? $loginParams['username'] : null;

我不确定我需要去哪个方向来修复此错误以使 t-hub 开始正确地与 magento 对话,我已经包含了我所拥有的一切,如果有人需要更多信息,请告诉我,我只需要更好地了解可能导致此错误的原因,以便找到修复它的途径。

4

1 回答 1

2

这是带有 T-Hub 扩展的旧代码库的问题。它是为 PHP 5.3 和 Magento 1.4 及以下版本创建的。他们真的应该更新这个东西,因为人们正在使用它。

该公司的官方回应是这样的:http: //support4.atandra.com/index.php ?/Knowledgebase/Article/View/92/4/magento-array_key_exists-error

这很可怕,因为它依赖于覆盖核心文件。

发生了什么是 Mage_Captcha_Model_Observer 有一个事件 checkUserLoginBackend() 被触发。这期望“登录”的 POST 信息是某种格式。多年来,由于遗留代码没有这种格式,这已经发生了变化。

这是一个非常hacky的修复。但这比覆盖核心 magento 文件要好。将 Mage/Thub/Model/Run/Run.php 的 CheckUser() 函数更改为此(我删除了他们的一些评论):

public function CheckUser()
{
    try {
        $username = $this->RequestParams['USERID'];
        $password = $this->RequestParams['PASSWORD'];

        //here we just set the POST to our specified format.. 
        //which is what the observer model thinks it should be
        Mage::app()->getRequest()->setPost('login', array(
            'username' => $username,
            'password' => $password
        ));

        $user = Mage::getSingleton('admin/user');
        $userRole = Mage::getSingleton('admin/role');

        if ($user->authenticate($username, $password)) {
            $loadRole = $userRole->load($user->getRoles($user));

        } else {
            print($this->xmlErrorResponse($this->RequestParams['COMMAND'], '9000',
                'Order download service authentication failure - Login/Password supplied did not match', $this->STORE_NAME, ''));
            exit;
        }

    } catch (Exception $e) {

        $this->Msg[] = "Critical Error CheckUser (Exception e)=" . $e->getMessage(); //BB 11Nov2014
        print($this->xmlErrorResponse($this->RequestParams['COMMAND'], '9001',
            'Service authentication failure - ' . " " . $e->getMessage(), $this->STORE_NAME, ''));
        // End - <TIBB> 13Dec2011
        exit;
    }
}

另一种选择是使用您自己的版本扩展 Mage_Captcha_Model_Observer 类,从而删除 checkUserLoginBackend() 中的这些数组检查。

于 2015-03-05T18:17:45.830 回答