使用 PHP 和 NuSOAP 通过 HTTPS 发出 SOAP 请求
我已经被这个问题困扰好几天了,尽管我认为这是一项相当常见的任务,但我似乎无法在任何地方找到答案。有人可以帮忙吗?
我正在尝试使用 PHP 和 NuSOAP 连接到 Web 服务。 Web 服务要求我既使用 ssl 证书,又在soap 请求中传递身份验证参数。根据 Web 服务管理员的说法,该请求应该如下所示:
<?xml version="1.0"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<o:Security xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<o:UsernameToken>
<o:Username>username</o:Username>
<o:Password>password</o:Password>
</o:UsernameToken>
</o:Security>
</s:Header>
<s:Body>
<PriceQuote xmlns="a_url">
<PartnerProfileId>a_unique_partner_id_we_have</PartnerProfileId>
<Reservation xmlns:d4p1="another_url" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
* a bunch of stuff
</Reservation>
</PriceQuote>
</s:Body>
</s:Envelope>
我一直在尝试找出如何使用 NuSOAP 来执行此操作。现在,这就是我所得到的(我不知道如何传递身份验证参数,或使用我拥有的证书文件):
$client = new nusoap_client("https://endpoint_url");
$client->soap_defencoding = 'UTF-8';
$result = $client->call("PriceQuote", "");
// For debugging
echo '<h2>Request</h2>';
echo '<pre>' . htmlspecialchars($client->request, ENT_QUOTES) . '</pre>';
echo '<h2>Response</h2>';
echo '<pre>' . htmlspecialchars($client->response, ENT_QUOTES) . '</pre>';
echo '<h2>Debug</h2>';
echo '<pre>' . htmlspecialchars($client->debug_str, ENT_QUOTES) . '</pre>';
通过使用上面的调试代码,我可以看到这是我得到的响应Web 服务:
HTTP/1.1 500 Internal Server Error
Date: Mon, 02 May 2011 13:42:14 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Cache-Control: private
Content-Type: text/xml; charset=utf-8
Content-Length: 347
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<s:Fault>
<faultcode xmlns:a="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
a:InvalidSecurity
</faultcode>
<faultstring xml:lang="sv-SE">
An error occurred when verifying security for the message.
</faultstring>
</s:Fault>
</s:Body>
</s:Envelope>
这个响应当然并不奇怪,因为我没有在请求中传递任何身份验证参数。
有谁知道如何在 SOAP 请求的标头中传递用户名和密码,以及如何使用我拥有的 ssl 证书文件?正如您可能知道的那样,我对 Web 服务和 NuSOAP 还很陌生。如果我的问题中的某些内容没有意义,请告诉我。
I've been stuck with this for days now and I can't seem to find the answer anywhere, even though I think it's a fairly common task. Can anyone help?
I'm trying to use PHP and NuSOAP to connect to a web service. The web service requires me to both use an ssl certificate, and pass authentication parameters in the soap request. The request is supposed to look like this according to the admins of the web service:
<?xml version="1.0"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<o:Security xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<o:UsernameToken>
<o:Username>username</o:Username>
<o:Password>password</o:Password>
</o:UsernameToken>
</o:Security>
</s:Header>
<s:Body>
<PriceQuote xmlns="a_url">
<PartnerProfileId>a_unique_partner_id_we_have</PartnerProfileId>
<Reservation xmlns:d4p1="another_url" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
* a bunch of stuff
</Reservation>
</PriceQuote>
</s:Body>
</s:Envelope>
I've been trying to figure out how to do this using NuSOAP. Right now, this is what I've got (I don't know how to pass the authentication parameters, or use the certificate files I have):
$client = new nusoap_client("https://endpoint_url");
$client->soap_defencoding = 'UTF-8';
$result = $client->call("PriceQuote", "");
// For debugging
echo '<h2>Request</h2>';
echo '<pre>' . htmlspecialchars($client->request, ENT_QUOTES) . '</pre>';
echo '<h2>Response</h2>';
echo '<pre>' . htmlspecialchars($client->response, ENT_QUOTES) . '</pre>';
echo '<h2>Debug</h2>';
echo '<pre>' . htmlspecialchars($client->debug_str, ENT_QUOTES) . '</pre>';
From using the debugging code above, I can see that this is the response I get from the web service:
HTTP/1.1 500 Internal Server Error
Date: Mon, 02 May 2011 13:42:14 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Cache-Control: private
Content-Type: text/xml; charset=utf-8
Content-Length: 347
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<s:Fault>
<faultcode xmlns:a="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
a:InvalidSecurity
</faultcode>
<faultstring xml:lang="sv-SE">
An error occurred when verifying security for the message.
</faultstring>
</s:Fault>
</s:Body>
</s:Envelope>
This response is of course not surprising, since I'm not passing any authentication parameters in the request.
Does anyone know how I can pass the username and password in the Header of the SOAP request, as well as how I use the ssl certificate files I have? As you can probably tell, I'm pretty new to web services and NuSOAP. If something in my question doesn't make sense, please let me know.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果您不需要 nu_soap 您可以通过以下脚本解决问题
if you don't need to you nu_soap you can solve the problem via below script