542179528 发表于 2015-8-30 07:06:01

PHP调用有SoapHeader认证的WebService实例

  这两天用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;  
  其中标红的位置注意一下,参数对应理解清楚。取数据问题也就不大了。。。

  
页: [1]
查看完整版本: PHP调用有SoapHeader认证的WebService实例