【转】php调用webservice和有SoapHeader认证的

来源:互联网 发布:郑州淘宝网店培训 编辑:程序博客网 时间:2024/05/16 00:50

摘自:http://hi.baidu.com/hero%CD%F5%E6%DD/blog/item/c28bdd3b27d0dce3b311c71b.html


转载自 kubile1987
最终编辑 kubile1987

         经过半个月的折磨,php调用没有SoapHeader认证和有SoapHeader的认证的webservice的代码终于调试成功了(这么久不是不会。。。是我代码漏了个符号,一直没找出来)。

        然后非常感谢额滴经理能给我这样的一个锻炼机会,让我能这样亲密接触webservice,因为还要使用asp,asp.net调用webservice。

一、php调用没有SoapHeader认证webservice

<?php
header("content-type:text/html;charset=utf-8");
$areaid = "1024";
$username = "test12";
$password = "12345678";
$sex = "1";
$ip = "172.68.4.100";
$cardid = "111111111111111";
$client = new SoapClient("http://localhost/service.asmx?WSDL"); //这里是webservice的可以使网络地址,也可以是本地的,但是本地一定要能打开的!是.net和java的webservice就得编译后的wsdl,php的调用格式见http://cn.php.net/manual/en/soapclient.soapclient.php
$params = array("areaid"=>$areaid, "userid"=>$username,"nickname"=>$username,"sex"=>$sex,"password"=>$password,"registerip"=>$ip, "cardid"=>$cardid);//参数以数组形式存在
$p = $client->__call("registerforphp",array($params));//调用register函数注册,调用的时候把参数还要array封装,具体为什么没有深入研究。。。反正这样才调得成功。
$data = $p->registerforphpResult;//。net的webservice的返回值为函数名+Result
print_r($data->Code);//这里我的webservice返回的是个string数组,所以又code和message。
print_r($data->Message);
?>

二、php调用有SoapHeader认证的webservice

<?php 
header('content-type:text/html;charset=utf-8');
$areaid = 'abc';
$account = 'abc';
$areakey = '123';
$username = 'test12';
$password = '12345678';
$sex = '1';
$ip = '172.68.4.100';
$cardid = '111111111111111';
$client = new SoapClient('http://localhost/service.asmx?WSDL');
$v = array('AreaID'=>$areaid, 'AreaAccount'=>$account, 'AreaKey'=>$areakey);//头的参数也是放在数组中
$headers = new SoapHeader('http://users.78diy.org/', 'WebServicesSoapHeader',$v);//第一个参数是命名空间,第二个参数是SoapHeader头的类名,第三个是SoapHeader参数的数组可以写成array('AreaID'=>$areaid,。。。。)
$client->__setSoapHeaders(array($headers));//添加soapheader
//print_r($client);
$params = array('userid'=>$username,'nickname'=>$username,'sex'=>$sex,'password'=>$password,'registerip'=>$ip, 'cardid'=>$cardid);
$p = $client->__call('register',array($params));//调用register函数注册
print_r($p->registerResult->Message);//取出返回的参数message

?>

具体就这样了,希望可以帮助需要的人!

还有的资料参考http://www.phptext.net/technology.php?vid=60

                         http://fcj2593.blog.163.com/blog/static/129461943200991423621843/


原创粉丝点击