PHP调用有SoapHeader认证的WebService实例
2011-09-20 16:28 ☆冷枫☆ 阅读(10654) 评论(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;
$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;
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;
其中标红的位置注意一下,参数对应理解清楚。取数据问题也就不大了。。。
励志博客园--优秀的阅读、励志、交流学习平台。您的网上心灵家园!