Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.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
在php5中通过Soap发送安全wse头_Php_Xml_Soap_Nusoap - Fatal编程技术网

在php5中通过Soap发送安全wse头

在php5中通过Soap发送安全wse头,php,xml,soap,nusoap,Php,Xml,Soap,Nusoap,我在发送安全wse头以使用web服务时遇到问题,并且已经从TargetProcess.com尝试了几十种使用此web服务的方法,我不确定我做错了什么 (http://demo.tpondemand.com/Services/ProjectService.asmx?wsdl) 他们的示例使用了一个非常旧的Nusoap版本,但是我尝试使用内置于SoapClient类中的php5来实现这一点 我被困在接收错误的请求错误或无法进行身份验证之间。那么我如何发送这些标题呢 这是我到目前为止所做的,但不起作用

我在发送安全wse头以使用web服务时遇到问题,并且已经从TargetProcess.com尝试了几十种使用此web服务的方法,我不确定我做错了什么

(http://demo.tpondemand.com/Services/ProjectService.asmx?wsdl)

他们的示例使用了一个非常旧的Nusoap版本,但是我尝试使用内置于SoapClient类中的php5来实现这一点

我被困在接收错误的请求错误或无法进行身份验证之间。那么我如何发送这些标题呢

这是我到目前为止所做的,但不起作用:

     $tp_header_part = '
      <wsa:Action>
        http://targetprocess.com/RetrieveAll
      </wsa:Action>
      <wsa:MessageID>
        urn:uuid:'.$this->getGuid().'
      </wsa:MessageID>
      <wsa:ReplyTo>
        <wsa:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:Address>
      </wsa:ReplyTo>
      <wsa:To>http://medios.tpondemand.com/Services/ProjectService.asmx</wsa:To>
      <wsse:Security SOAP-ENV:mustUnderstand="1">
        <wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" 
          wsu:Id="SecurityToken-'.$this->getGuid().'">
        <wsse:Username>MYUSERNAME</wsse:Username>
        <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">
          MYPASSWORD
        </wsse:Password>
        </wsse:UsernameToken>
      </wsse:Security>';


$soap_var_header = new SoapVar( $tp_header_part, XSD_ANYXML, null, null, null );

$soap_header = new SoapHeader( 'http://schemas.xmlsoap.org/ws/2003/06/secext', 'Security', $soap_var_header );
$client->__setSoapHeaders($soap_header);
$tp\u头\u部分
http://targetprocess.com/RetrieveAll
urn:uuid:'.$this->getGuid()
http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous
http://medios.tpondemand.com/Services/ProjectService.asmx
我的用户名
我的密码
';
$soap_var_header=新的SoapVar($tp_header_部分,XSD_ANYXML,null,null);
$soap\u header=新的SoapHeader('http://schemas.xmlsoap.org/ws/2003/06/secext“,”安全性“,$soap\u var\u头);
$client->\u设置soap阅读器($soap\u头);
p、 s getGuid函数只是根据其文档生成了所需的guid


有什么想法吗?

如果目标服务器是使用.NET/ASP编写的,那么获取“完美”的XML请求可能会非常麻烦—例如,当使用名称空间前缀时,在XML中包含名称空间的声明也很重要

我可以在您的XML中看到几个名称空间的示例(wsa、wsse、SOAP-ENV),这些名称空间似乎没有被删除——如果PHP SOAP客户端能够自动填充它们,我会感到惊讶。您似乎只完整声明了“wsse”='http://schemas.xmlsoap.org/ws/2003/06/secext,通过启动SoapHeader对象

如果可能的话,在PHP和目标服务器之间放置一个数据包嗅探器(例如),以准确地查看发送和接收的内容-这可以使跟踪错误变得更加容易,并找出拒绝XML的原因

我建议对初始代码进行两次修改,使其成为“有效的XML”:

  • wsa:Action-添加
    xmlns:wsa=“”
  • SoapHeader-我不确定,但由于您已将名称空间URI放在此处,因此可能需要在对象名称上包含名称空间前缀:

    $soap_header = new SoapHeader( 'http://schemas.xmlsoap.org/ws/2003/06/secext', 'wsse:Security', $soap_var_header );
    

不过,最重要的是找到一些方法来获得PHP客户机和目标服务器之间的确切HTTP对话——如果您还可以获得一个工作示例来进行比较和对比,这通常会使生活变得100%轻松

想知道你是否能让它工作?我正在尝试用PHP连接.NETSOAPAPI,这是一场噩梦。