日前调用第三方WebService接口时遇到了SoapHeader验证的问题,记录一下解决方法。
接口需要的格式:
<soapenv:Header> <ReqSOAPHeader xmlns="http://xxx.com"> <appKey>key</appKey> <authKey>pwd</authKey> </ReqSOAPHeader> <soapenv:Header>
C#:
//创建header类,注意属性名 [DataContract(Namespace = "http://xxx.com")] public class ReqSOAPHeader { [DataMember] public string appKey { get; set; } [DataMember] public string authKey { get; set; } } //client 为根据wsdl生成的代理类 //创建并加入请求 AddressHeader soapheader = AddressHeader.CreateAddressHeader("ReqSOAPHeader", "http://xxx.com", new ReqSOAPHeader { appKey = "key", authKey = "pwd" }); EndpointAddressBuilder eab = new EndpointAddressBuilder(client.Endpoint.Address); eab.Headers.Add(soapheader); client.Endpoint.Address = eab.ToEndpointAddress();
PHP:
//创建Header类 //注意属性名 class ReqSOAPHeader { public $appKey; public $authKey; public function __construct($app,$auth) { $this->appKey=$app; $this->authKey=$auth; } } //创建soapclient并加入头 $simple = new SoapClient(null, array('location'=>$location,'uri'=>'xxx.com','encoding'=>'UTF-8')); $auth = new ReqSOAPHeader("key", "pwd"); $header = new SoapHeader('http://xxx.com', 'ReqSOAPHeader', $auth); $simple->__setSoapHeaders($header);