Проблема с подключением к SOAP API в защищенном паролем каталоге - PullRequest
4 голосов
/ 15 сентября 2011

Я пытаюсь получить доступ к API Magento, используя SOAP.у меня нормально работает код, однако клиент желает защитить паролем главную папку Magento.Это нарушает доступ к API и вызывает ошибку.

Документация предполагает, что это не проблема, и вы можете просто указать имя пользователя / пароль, однако это не работает.

Я использую PHP и IIS с защитой паролем, настроенной через Plesk 10. Использует ли это обычную HTTP-аутентификацию или что-то еще?

Мой код доступа:

$client = new SoapAuthClient($GLOBALS["magento_api_path"],array(  

                            'login'=>"admin", 
                            'password'=>"password" 
                          ) 
                    ); 
$session = $client->login($GLOBALS["magento_api_user"], $GLOABLS["magento_api_password"] ,
                    array(  

                            'login'=>"admin", 
                            'password'=>"password" 
                          ) ); 

Я получаю сообщение об ошибке:

Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://www.domain.co.uk/magento/index.php/api/index/index/wsdl/1/' : failed to load external entity "http://www.domain.co.uk/magento/index.php/api/index/index/wsdl/1/" in C:\Inetpub\vhosts\domain.co.uk\httpdocs\backend\index.php:20 Stack trace: #0 C:\Inetpub\vhosts\domain.co.uk\httpdocs\backend\index.php(20): SoapClient->__call('login', Array) #1 C:\Inetpub\vhosts\domain.co.uk\httpdocs\backend\index.php(20): SoapClient->login('backenduser', 'backendwebuser', Array) #2 {main} thrown in C:\Inetpub\vhosts\domain.co.uk\httpdocs\backend\index.php on line 20

Указанная строка является командой $ client-> login.

Есть предложения?

Ответы [ 4 ]

8 голосов
/ 24 сентября 2011

Я давно сталкивался с похожей проблемой.

В моем случае я не сразу понял, что мне нужно использовать учетные данные .htaccess при создании экземпляра SoapClient, но передать учетные данные SOAP API методу login.

Я передавал учетные данные SOAP API и получил похожую ошибку, как и вы.

Вот что у меня сработало (хотя версия 1.3.x. У меня все еще работает на сегодняшний день):

$cProxy = new SoapClient(
    URL . 'index.php/api/soap/?wsdl',
    array(
        'login' => HTACCESS_USER,
        'password' => HTACCESS_PASS
    )
);
$rSessionId = $cProxy->login(
    SOAP_USER,
    SOAP_PASS
);

Просто для того, чтобы сыграть, за исключением того, что вы не попали в ловушку опечатки: вы передаете $GLOABLS["magento_api_password"] в качестве второго параметра методу login, который должен быть $GLOBALS["magento_api_password"].

Наконец, вы передаете 3-й аргумент методу login, который, я считаю, устарел, поскольку afaik определен только для двух параметров:

<message name="login">
    <part name="username" type="xsd:string" />
    <part name="apiKey" type="xsd:string" />
</message>
4 голосов
/ 20 сентября 2011

Был там, сделал это: P

    $client = new SoapClient("http://${http_user}:${http_pass}@subdomain.domain.com", array(
        'login' => $user,
        'password' => $pass,
    ));

Проблема в том, что использование http-аутентификации происходит только во время запросов, а не во время фактической загрузки wsdl при первом запросе. Чтобы обойти это, просто используйте формат, который я разместил выше: http://USERNAME:PASSWORD@server.com/

Приветствия

2 голосов
/ 22 сентября 2011

Эта проблема, вероятно, связана с тем, что внутренне Magento запрашивает через локальный HTTP-запрос свой собственный WSDL. Поскольку вы защитили паролем доступ, он не будет работать. Измените параметры безопасности, чтобы пароль не требовался, если запрос исходит от localhost.

0 голосов
/ 02 октября 2011

Если вы посмотрите на Mage_Api_Model_Server_Adapter_Soap::getWsdlUrl(), то увидите, что magento предполагает, что базовый логин и пароль аутентификации передаются как переменные окружения PHP_AUTH_USER и PHP_AUTH_PW.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...