Я устанавливаю «песочницу» для интеграции T-Hub с Magento и QuickBooks. Я настроил свой жизненный сайт локально, используя сервер WAMP, и теперь он пытается связать этот локальный сайт Magento с T-hub.
Первая ошибка, которую я получил, указала
«Не удалось подключиться к магазину Magento. Ошибка аутентификации службы — Примечание. Неопределенный индекс: httponly в c: \ wamp \ www \ testsite \ appcode \ core \ mage \ Core \ Model \ Session \ Abtract \ Varien.php в строке 98».
После некоторых поисков я нашел общее мнение о том, что я должен был поставить ssl на свой локальный сервер, готово, проблема исчезла. Теперь я получаю общее сообщение об ошибке, которое просто говорит
«Не удалось подключиться к Magento»
Я использовал тестовую страницу, которую Атандра включил в свои файлы, которые вернули это:
<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, я включил все, что у меня есть, если кому-то нужна дополнительная информация, пожалуйста, дайте мне знать, мне просто нужно лучшее понимание того, что может быть причиной этой ошибки, чтобы найти путь к ее исправлению.
Эта проблема связана с устаревшей кодовой базой с расширением 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 для ‘login’ будет определенным форматом. Это то, что изменилось за прошедшие годы, так как в устаревшем коде его нет в этом формате.
Это действительно хакерское исправление. Но это лучше, чем переопределение основных файлов magento.
Измените функцию CheckUser () в Mage / Thub / Model / Run / Run.php на эту (я удалил некоторые из их комментариев):
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 ().
Других решений пока нет …