Php 连接到受密码保护的目录中的SOAP API时出现问题
我正在尝试使用SOAP访问MagentoAPI。我的代码正常工作,但客户端希望密码保护Magento主文件夹。这样做会中断对API的访问并导致错误 文档表明这不是问题,您可以只指定用户名/密码,但这不起作用 我使用PHP和IIS,通过Plesk10设置密码保护。这是使用基本HTTP身份验证还是其他方法 我的密码是: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(
$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>