使用PHP和NuSOAP通过HTTPS发出SOAP请求
发布时间:2020-12-13 16:11:41 所属栏目:PHP教程 来源:网络整理
导读:我已经坚持了好几天了,我似乎无法在任何地方找到答案,尽管我认为这是一项相当普遍的任务.有人可以帮忙吗? 我正在尝试使用PHP和NuSOAP连接到Web服务. Web服务要求我使用ssl证书,并在soap请求中传递身份验证参数.根据Web服务的管理员,请求应该看起来像这样:
我已经坚持了好几天了,我似乎无法在任何地方找到答案,尽管我认为这是一项相当普遍的任务.有人可以帮忙吗?
我正在尝试使用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请求的Header中传递用户名和密码,以及我如何使用我拥有的ssl证书文件?你可能会说,我对Web服务和NuSOAP都很陌生.如果我的问题中的某些内容没有意义,请告诉我. 解决方法
如果您不需要nu_soap,可以通过以下脚本解决问题
<?PHP $client = new SoapClient("http://Your Wsdl Location",array("trace" => 0)); $HeaderSecurity = array("UsernameToken"=>array("Username"=>"YourUserName","Password"=>"YourPassword",) ); $header[] = new SoapHeader("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd","Security",$HeaderSecurity); $client->__setSoapHeaders($header); //$client->__setLocation("https://YourTargetLocation/"); if you have wsdl file you don't need to use this line $REsponse = $client->YourRequest(); ?> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |