Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用PHP进行SOAP身份验证_Php_Authentication_Soap_Nusoap_Wso2 - Fatal编程技术网

用PHP进行SOAP身份验证

用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)

我需要连接到需要以纯文本用户名和密码形式的身份验证凭据的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

我已经尽了最大的努力寻找关于上述内容的资源(谷歌、论坛等),但没有找到任何东西。我已经阅读了一些关于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。