我需要以纯文本用户名和密码的形式连接到需要身份验证凭据的Web服务。
我对SOAP有基本的了解,并设法使用NuSOAP连接到不需要用户名或密码的其他开放式Web服务。
以下内容已发送给我:
<?php
// Set up security options
$security_options = array("useUsernameToken" => TRUE);
$policy = new WSPolicy(array("security" => $security_options));
$security_token = new WSSecurityToken(array(
"user" => "xxx",
"password" => "xxx",
"passwordType" => "basic"));
// Create client with options
$client = new WSClient(array("wsdl" => "https://xxx.asmx?wsdl",
"action" => "http://xxx",
"to" => "https://xxx",
"useWSA" => 'submission',
"CACert" => "cert.pem",
"useSOAP" => 1.1,
"policy" => $policy,
"securityToken" => $security_token));
// Send request and capture response
$proxy = $client->getProxy();
$input_array = array("From" => "2010-01-01 00:00:00",
"To" => "2010-01-31 00:00:00");
$resMessage = $proxy->xxx($input_array);
?>
经过一些研究,我了解到上面的实现使用了wso2。我需要能够在不使用wso2的情况下完成此操作。
我已尽力寻找有关上述内容的资源(Google,论坛等),但未能找到任何内容。我已经阅读了一些关于SOAP的教程,并且能够使用PHP建立一个SOAP客户端,但无法理解所有的身份验证和“策略”。
如何实现这一目标的解释以及可能会有一些关于进一步阅读此内容的链接将非常感激,因为我正在撕扯我的头发!理想情况下,我希望为SOAP身份验证的绝对初学者提供一些资源链接。
感谢。 P.S上面的一些链接/凭证可能是xxx'd隐私。
答案 0 :(得分:10)
如果您在php(php版本&gt; = 5.0.1)中启用了SOAP扩展,则可以使用SoapClient类来处理您的请求。要进行身份验证,您可以将用户名和密码传递给具有目标URL的类:
$soapURL = "https://www.example.com/soapapi.asmx?wsdl" ;
$soapParameters = Array('login' => "myusername", 'password' => "mypassword") ;
$soapFunction = "someFunction" ;
$soapFunctionParameters = Array('param1' => 42, 'param2' => "Search") ;
$soapClient = new SoapClient($soapURL, $soapParameters);
$soapResult = $soapClient->__soapCall($soapFunction, $soapFunctionParameters) ;
if(is_array($soapResult) && isset($soapResult['someFunctionResult'])) {
// Process result.
} else {
// Unexpected result
if(function_exists("debug_message")) {
debug_message("Unexpected soapResult for {$soapFunction}: ".print_r($soapResult, TRUE)) ;
}
}
如果您不确定可以调用的功能,可以在浏览器中查看目标网址(例如以“.asmx?wsdl”结尾)。您应该获得一个XML响应,告诉您可以调用的可用SOAP函数,以及这些函数的预期参数。
答案 1 :(得分:0)