Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 连接到受密码保护的目录中的SOAP API时出现问题_Php_Magento_Soap_Iis 7.5 - Fatal编程技术网

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

Php 连接到受密码保护的目录中的SOAP API时出现问题,php,magento,soap,iis-7.5,Php,Magento,Soap,Iis 7.5,我正在尝试使用SOAP访问MagentoAPI。我的代码正常工作,但客户端希望密码保护Magento主文件夹。这样做会中断对API的访问并导致错误 文档表明这不是问题,您可以只指定用户名/密码,但这不起作用 我使用PHP和IIS,通过Plesk10设置密码保护。这是使用基本HTTP身份验证还是其他方法 我的密码是: $client = new SoapAuthClient($GLOBALS["magento_api_path"],array(

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

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

我使用PHP和IIS,通过Plesk10设置密码保护。这是使用基本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命令


有什么建议吗?

去过那里,做了那件事:p

    $client = new SoapClient("http://${http_user}:${http_pass}@subdomain.domain.com", array(
        'login' => $user,
        'password' => $pass,
    ));
问题在于,http身份验证的使用只发生在请求期间,而不是在第一个请求实际获取wsdl时。要解决这个问题,只需使用我在上面发布的格式:


Cheers

这个问题可能是因为Magento内部通过本地HTTP请求请求它自己的WSDL。由于您已对访问进行了密码保护,因此无法使用。修改安全性,如果请求来自本地主机,则不需要密码。

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

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

我将SOAP API凭据传递到了所有地方,并得到了一个与您类似的错误

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

只是为了玩save,您没有被输入错误困住:您将
$GLOABLS[“magento\u api\u password”]
作为
登录
方法的第二个参数,该方法应该是
$GLOBALS[“magento\u api\u password”]

最后,您将第三个参数传递给
login
方法,我认为该方法已经过时,因为afaik将其定义为只有两个参数:

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


如果您查看
Mage\u Api\u Model\u Server\u Adapter\u Soap::getWsdlUrl()
您将看到,magento假设基本身份验证登录名和密码作为环境变量
PHP\u auth\u USER
PHP\u auth\u PW

传递,这似乎也不起作用-我仍然收到相同的错误:(或者,为WSDL URL添加一个异常。您能建议如何使用Plesk在IIS上执行此操作吗?除了在目录上输入密码之外,我没有任何其他选项,我看不到任何地方可以添加异常?不幸的是,没有。抱歉。但我敢打赌,如果您打开WSDL的URL,它将工作。我认为他们使用内部HTTP请求,因此他们可以获取一个完全解析的WSDL。是的,直接访问WSDL很好。我想这就是问题所在,我现在需要的是一个解决方案。如何添加异常,或向内部HTTP请求添加身份验证?我建议将其拆分为一个新问题。这是一个最适合ServerFault的基本IIS和/或Plesk管理问题。至于错误y你会发现,我提供的答案是告诉你是什么导致了错误。你正在运行哪个版本的Magento?我这样问是因为,看看代码,1.4.2+不应该再有回调身份验证问题了。我在从Java访问Magento SOAP API时遇到了这个问题。代码失败,出现了“401:Unauthorized”错误。读取t他说:“我意识到我试图访问的开发站点受密码保护。您的回答没有解决所述问题。您正在解决需要HTTP AUTH info的初始访问问题。问题是Magento会对自身进行内部调用以获取解析的WSDL。如果您的web服务器配置为需要HTTP AUTH,则在这个内部请求上,它失败了。
<message name="login">
    <part name="username" type="xsd:string" />
    <part name="apiKey" type="xsd:string" />
</message>