我在创建从PHP应用程序到.NET Web服务的连接时遇到了一些麻烦。我已经在很多网站上阅读了该做什么,但我似乎无法使其发挥作用。
Web服务需要用户名和密码,而我所要做的就是通过发送用户ID来获取用户数据管理系统中的一些用户配置文件数据。
这是提供者所说的SOAP请求应该是这样的:
POST /feed30/clientdataservice.asmx HTTP/1.1
Host: ws-ic-pilot.acme.com
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "GetUser"
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetUser xmlns="urn:Acme:ClientDataService">
<strUserId>string</strUserId>
</GetUser>
</soap:Body>
</soap:Envelope>
以下是根据我在互联网上各种网站上发现的代码编写的代码:
$client = new SoapClient('https://ws-ic-pilot.acme.com/feed30/clientdataservice.asmx
WSDL',Array("trace" => 1));
$header = new SoapHeader(
array(
'UserName' => 'myusername',
'Password' => 'mypassword',
'strUserID' => '12345'
) );
$client->__setSoapHeaders($header);
$client->GetUser();
当我使用__getLastRequestHeaders和__getLastRequest时,我正在创建的SOAP消息如下所示:
POST /feed30/clientdataservice.asmx HTTP/1.1
Host: ws-pilot.acme.com
Connection: Keep-Alive
User-Agent: PHP-SOAP/5.3.21
Content-Type: text/xml; charset=utf-8
SOAPAction: "GetUser"
Content-Length: 247
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="urn:Acme:ClientDataService"><SOAP-ENV:Header/>
<SOAP-ENV:Body><ns1:GetUser/>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
当我将SOAP消息发布到.NET服务器时,我收到以下响应:
<ExceptionInfo>Exception Message: Security requirements are not satisfied because the
security header is not present in the incoming message.;Exception Target Method:
ValidateMessageSecurity</ExceptionInfo></detail>
</soap:Body></soap:Envelope>
有人可以就我如何解决这个问题提出建议/建议吗?
预先感谢您的协助!
答案 0 :(得分:0)
所以我找到了问题的答案。在我的情况下,似乎SOAPClient不是最好的方法。相反,更好的方法是通过CURL创建,发送和接收SOAP消息。以下是我在另一个Stackoverflow页面上找到的示例。我根据自己的情况调整了它,效果很好!
$credentials = "username:pass";
$url = "https://url/folder/sample.wsdl";
$body = ''; /// Your SOAP XML needs to be in this variable
$headers = array(
'Content-Type: text/xml; charset="utf-8"',
'Content-Length: '.strlen($body),
'Accept: text/xml',
'Cache-Control: no-cache',
'Pragma: no-cache',
'SOAPAction: "customerSearch"'
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_USERAGENT, $defined_vars['HTTP_USER_AGENT']);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, $credentials);
$data = curl_exec($ch);