webservice接口Header认证

对于第三方webserice接口,拿到服务器需要的正确报文是成功的一半

有这种报文:

<SOAP-ENV:Header>
    <ns1:RequestSOAPHeader>
        <loginname>test</loginname>
        <loginpass>111</loginpass>
    </ns1:RequestSOAPHeader>
</SOAP-ENV:Header>

处理方式:

<?php
 function setHeader($username,$password, $headerName="RequestSOAPHeader")
    {
        //Body of the Soap Header. 
        $headerbody = array(
                'loginname'=> $username,
                'loginpass' => $password
                );
        $header = new SOAPHeader($this->ns, $headerName, $headerbody);
        $this->client->__setSoapHeaders($header);
    }

也有这种报文:

<soapenv:Header>
      <jws:secretKey>295bafa91d3020e1fe5fdda7992bce37</jws:secretKey>
      <jws:usrName>100100</jws:usrName>
      <jws:version>1.0.0</jws:version>
   </soapenv:Header>

处理方式:

	function setHeader($username,$password, $headerName="RequestSOAPHeader")
	{
 
		$secret = md5($password);

		$xmlvar = new SoapVar(
				'<ns1:secretKey>'.$secret.'</ns1:secretKey>
				<ns1:usrName>'.$username.'</ns1:usrName>
				<ns1:version>1.0.0</ns1:version>',
				XSD_ANYXML
				);
		$header = new SOAPHeader($this->ns, $headerName, $xmlvar);
		$this->client->__setSoapHeaders(array($header));
        }

可以通过__getLastRequestHeaders方法取得自己发送的报文,做对比设计 。

不需要特别关注上面的ns1还是jws也不需要特别关注SOAP-ENV还是soapenv这些不重要,重要的是xml变量和层级。

参考:

http://cn.php.net/manual/zh/soapheader.soapheader.php

http://cn.php.net/manual/zh/soapvar.soapvar.php

全代码见附件

 

soap_sms.class.php (5.67 K, 下载次数:79, 上传时间:2012-02-28 15:30)

Tags: webservice

上一篇: 在Tomato里运行的tcpdump等工具   下一篇: 解决json_encode中文UNICODE转码问题

你问我答

  1. #1 头像 sunzihao128858 2012-04-06 16:13:47
    很好。哦。O(∩_∩)O~

提交疑问

回顶部