用PHP进行SOAP身份验证
我需要连接到需要以纯文本用户名和密码形式的身份验证凭据的web服务 我对SOAP有基本的了解,并使用NuSOAP成功连接到其他不需要用户名或密码的开放式web服务 以下是发给我的:用PHP进行SOAP身份验证,php,authentication,soap,nusoap,wso2,Php,Authentication,Soap,Nusoap,Wso2,我需要连接到需要以纯文本用户名和密码形式的身份验证凭据的web服务 我对SOAP有基本的了解,并使用NuSOAP成功连接到其他不需要用户名或密码的开放式web服务 以下是发给我的: <?php // Set up security options $security_options = array("useUsernameToken" => TRUE); $policy = new WSPolicy(array("security" => $security_options)
<?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
我已经尽了最大的努力寻找关于上述内容的资源(谷歌、论坛等),但没有找到任何东西。我已经阅读了一些关于SOAP的教程,并且已经能够使用PHP设置SOAP客户机,但是我无法理解所有的身份验证和“策略”
一个如何实现这一点的解释,也许一些链接,进一步阅读有关这将是非常感谢,因为我撕裂我的头发了!理想情况下,我希望为SOAP认证的绝对初学者提供一些参考资料的链接
谢谢。P.S上面的一些链接/凭证可能是出于隐私考虑而被删除的。
如果您在php中启用了SOAP扩展(php版本>=5.0.1),您可以使用该类来处理您的请求。要进行身份验证,可以将用户名和密码传递给具有目标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)) ;
}
}
如果您不确定可以调用哪些函数,可以在浏览器中查看目标URL(例如,以“.asmx?wsdl”结尾)。您应该会得到一个XML响应,告诉您可以调用的可用SOAP函数,以及这些函数的预期参数。查看我尝试了上述方法,并在$soapFunctionParameters中包含了我原始代码中的额外参数,但我遇到了一个异常“需要对最终收件人执行操作,但此操作不在邮件中”。您认为函数WSPolicy和WSSecurity token的作用是什么?同样,我完全不知道这一点。仅供参考-$soapResult=…soapCall()中的$soapFunctionParameters拼写不正确。我在搜索此信息时遇到此问题,并使用您的代码进行测试。这可能无关紧要,因为这是从2010年开始的。@guss soap服务器如何验证通过
$soapParameters
数组传递给soapclient的登录数据?在我的PHP soap服务器脚本中,$\u服务器['PHP\u AUTH\u USER']
没有设置,所以我应该如何验证?问题是关于PHP,而不是Python。