首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连接到受密码保护的目录中的SOAP API时出现问题

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

Stack Overflow用户
提问于 2011-09-16 03:04:12
回答 4查看 6.8K关注 0票数 4

我正在尝试使用SOAP访问Magento API。我的代码正常工作,但是客户希望密码保护Magento主文件夹。这样做会中断对API的访问并导致错误。

文档建议这不是问题,您可以只指定用户名/密码,但是这不起作用。

我使用的是PHP和IIS,通过Plesk 10设置的密码保护。这是使用基本的HTTP身份验证还是其他什么?

我的访问代码是:

代码语言:javascript
复制
$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" 
                          ) ); 

我得到的错误是:

代码语言:javascript
复制
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命令。

有什么建议吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-09-22 06:31:46

这个问题可能是因为Magento在内部通过本地HTTP请求请求它自己的WSDL。由于您已对访问进行了密码保护,因此无法正常工作。修改安全性,使其在请求来自localhost时不需要密码。

票数 2
EN

Stack Overflow用户

发布于 2011-09-24 22:25:26

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

在我的例子中,我没有立即意识到在创建SoapClient实例时需要使用.htaccess凭据,而是将SOAP API凭据传递给login方法。

我到处传递SOAP API凭据,得到了一个与您类似的错误。

以下是对我有效的方法(不过是1.3.x版本。到今天为止仍然适用于我):

代码语言:javascript
复制
$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方法传递了第三个参数,我认为它已经过时了,因为它被定义为只有两个参数:

代码语言:javascript
复制
<message name="login">
    <part name="username" type="xsd:string" />
    <part name="apiKey" type="xsd:string" />
</message>
票数 8
EN

Stack Overflow用户

发布于 2011-09-20 18:19:26

去过那里,做过:P

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

问题是,http auth的使用只发生在请求期间,而不是在实际获取第一个请求的wsdl时。要解决这个问题,只需使用我在上面发布的格式:http://USERNAME:PASSWORD@server.com/

干杯

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7436069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档