连接到密码保护目录中的 SOAP API 时出现问题

问题描述 投票:0回答:4

我正在尝试使用 SOAP 访问 Magento API。我的代码正常工作,但是客户希望用密码保护 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 命令。

有什么建议吗?

php magento soap iis-7.5 magento-soap-api
4个回答
8
投票

我很久以前就遇到过类似的问题。

就我而言,我没有立即意识到在创建

.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"]

最后,您将第三个参数传递给

login
方法,我认为该方法已过时,因为据我所知,它被定义为只有两个参数:

<message name="login">
    <part name="username" type="xsd:string" />
    <part name="apiKey" type="xsd:string" />
</message>

4
投票

去过那里,做过那件事:P

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

问题在于,http 身份验证的使用仅发生在请求期间,而不是在第一个请求上实际获取 wsdl 时发生。要解决这个问题,只需使用我上面发布的格式:http://USERNAME:[电子邮件受保护]/

干杯


2
投票

此问题可能是因为 Magento 在内部通过本地 HTTP 请求请求它自己的 WSDL。 由于您已使用密码保护访问,因此它不会起作用。 如果请求来自本地主机,请将安全性修改为不需要密码。


0
投票

如果您查看

Mage_Api_Model_Server_Adapter_Soap::getWsdlUrl()
,您会发现,magento 假定基本身份验证登录名和密码作为环境变量
PHP_AUTH_USER
PHP_AUTH_PW
传递。

© www.soinside.com 2019 - 2024. All rights reserved.