代码改变世界

PHP调用有SoapHeader认证的WebService实例

2011-09-20 16:28  ☆冷枫☆  阅读(10642)  评论(1编辑  收藏  举报

这两天用php调用.NET的WebService总是出现这样那样的问题,问题主要出在SoapHeader认证的环节上。因此这里总结下,避免下次出现同样的情况。

 

 这里主要讨论下php调用WebService的情况,Server端就默认已经存在了。

 

首先看无SoapHeader认证的情况:

 

try{
    
$client = new SoapClient('http://w15.abc.com/SmsWebService.asmx?wsdl');
    
$result = $client->addSendSms($paramArr);
    
$result = simplexml_load_string($result->addSendSmsResult);
    
$state = $result->smsstate;
}
catch (SoapFault $fault){}
echo $state;

 

说明:  这里只要将$paramArr以数组的形式封装传递给addsendsms方法即可正常调用。

 

 再看看有header验证的情况吧,这里就直接贴正常的代码了。里面有详细的说明

<?php
header('Content-Type: text/html; charset=utf-8');

$s = new SoapClient('http://w1.abc.com/SmsWebService.asmx?wsdl');
/*
 *SoapHeader参数说明如下所示:
 *'http://tempuri.org/'   namespace(命名空间可省略)
 *'MySoapHeader'          SoapHeader头的类名
 *'array(...)'            存放标识身份的字符串参数
 *'true'                  是否必须处理该header
*/
$u = new SoapHeader(http://tempuri.org/','MySoapHeader',array('UserName'=>'admin','PassWord'=>'123456'),true);

//添加soapheader
$s->__setSoapHeaders($u);

//调取需要的webservice方法
$suc = $s->GetStockCode(array('SendType'=>'s05'));
echo $suc->GetStockCodeResult;

 

其中标红的位置注意一下,参数对应理解清楚。取数据问题也就不大了。。。