注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

phperwuhan的博客

记载一个phper的历程!phperwuhan.blog.163.com

 
 
 

日志

 
 

入门级的讲讲soap这个php webservice  

2011-12-31 10:35:58|  分类: php |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

来源:http://www.zendstudio.net/archives/php-webservice-soap/

写在前面的话:某天中午,我和同事们一起吃饭,期间我们聊到《XXX》游戏,不可否认,它确实很令人称赞,然后我问JJ,你多少级?他回8级,另个同事已经13级(高玩啊),然后我便开玩笑,JJ你个位数也好意思拿出来说,然后大家问我几级,我6级,哈哈哈,大家都笑了。。。师傅这时候说:“五十步笑百步,有意义么?”,当然这仅仅是我们几个开的一个玩笑。鲁迅先生曾说“文人相轻”,从我这么久泡论坛的经历来看,我们程序员也爱相轻,很多时候,我都觉得这个太不可思议了,技术本是拿来促进社会进步,改善生存环境的一种手段,大家都是同行,又有什么好互相看不起的呢?

进入正题,今天我打算总结下php自带的soap类的使用,总结才有进步。

1、通过开放的webservice获取天气预报数据

这里通过一个开放的提供soap webservice接口的网站说明下如何根据wsdl(什么是wsdl?)使用php调用现有的soap服务!

<?php  /**   * 从开放的天气预报服务中获得数据   *  **/     $c = new SoapClient( 'http://www.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl',          array( 'trace' => true, 'exceptions' => true ) );     //var_dump( $c->__getFunctions() );  //var_dump( $c->__getTypes() );  //不需要参数的情况  $pr =$c->getRegionProvince();  //var_dump( $pr->getRegionProvinceResult->string );     //带有参数的情况  $scs = $c->getSupportCityString( array( 'theRegionCode' => '福建' ) );  var_dump( $scs->getSupportCityStringResult->string );     //也可以这样做  $we = $c->__call('getWeather', array( array( 'theCityCode' => 2210 ) ) );  var_dump( $we );  ?>

2、如何实现php的soapServer和SoapClient

还是看代码不说话,我这里有个简单的例子,注意,实际应用中一定要对异常进行处理,否则不方便和php以外的程序通信。
这是服务端代码:

<?php  $ss = new SoapServer( null, array( 'uri' => 'http://zendstudio.Net' ) );  $ss->setClass( 't', '参数1', '参数2' );  $ss->handle();  //$request = file_get_contents( 'php://input' );  //file_put_contents( 'request.txt', $request );  class t{      function __construct( $p1, $p2 ){      }      function im8( $g ){    return 'OK----'. $g;   }     }  ?>

客户端代码:

<?php  $ss = new SoapClient( null, array( 'uri' => 'http://zendstudio.Net', 'location' => 'http://localhost/soap.php' ) );  $header = new SoapHeader( 'zendHeader', 'mmcYY', '12345678' );  $ss->__setSoapHeaders( $header );  echo $ss->im8( 'gently' );     ?>

3、如何在php的soap客户端和服务端添加SoapHeader头

实际上,上面的例子已经实现了在客户端添加SoapHeader,而服务端的添加SoapHeader同样的简单,实例化一个 SoapHeader,然后使用SoapServer的addSoapHeader方法添加进去即可,这个头一般是学习php soap的一个难点,通常我们做的最多的是用soap的方式和其他程序通信,用php如何构造soapheader显得有些不容易,以至于依赖于这个头的服务端总是返回不正确。

4、从php的服务端如何获取SoapHeader

这个大概就是很多人认为php对soap支持不完整的一个原因,目前的php版本无法直接获取SoapHeader,因此我想了一个笨方法,先通过使用php://input,获取所有POST上来的数据,然后使用正则表达式分离出SoapHeader的XML部分,然后再整理出想要的格式。

另外,在PHP的SoapServer端可以通过转存$_SERVER和上面讲到的php://input获取soap的“原始”通信内容。

  评论这张
 
阅读(391)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017