这几天在做soap接收上行数据,他是一个接口,从网上可以下到nusoap.php这个文件。

如果短信接口的服务器端没有用PHP自带的soap扩展,是自己写的,而我们网站打开了soap扩展,这就很让我为难了,环境不一样,代码就有些小不一样了。纠结了我半天,最后我同事发现nusoap.php的最后有

if (!extension_loaded('soap')) {

/**

* For backwards compatiblity, define soapclient unless the PHP SOAP extension is loaded.

*/

class soapclient extends nusoap_client {

}

}

这段代码,晕,这下我知道该怎么做了,

require_once dirname(__FILE__)."/nusoap.php";

//创建一个soapclient对象,参数是server的WSDL 

$client=new nusoap_client('http://61.145.229.29:9002/MWGate/wmgw.asmx?wsdl');

//将对应参数值赋到下面数组以供调用

$parameters = array(

'userId'=>$userid,

'password'=>$password

);

$sms=$client->call('MongateCsGetSmsExEx',$parameters);

实例化nusoap_client这个类,就OK了。

好了,不兼容的问题解决了,剩下的就是编码的问题了,在文件头部要加上header('Content-Type:text/html;charset=UTF-8');

然后修改nusoap.php这个文件,将var $decode_utf8 = true;改成var $decode_utf8 = false;

将这些都给改成UTF-8

if (strpos($headers['content-type'], '=')) {

$enc = str_replace('"', '', substr(strstr($headers["content-type"], '='), 1));

$this->debug('Got response encoding: ' . $enc);

if(preg_match('/^(ISO-8859-1|US-ASCII|UTF-8)$/i',$enc)){

$this->xml_encoding = strtoupper($enc);

} else {

// $this->xml_encoding = 'US-ASCII';

$this->xml_encoding = 'UTF-8';

}

} else {

// should be US-ASCII for HTTP 1.0 or ISO-8859-1 for HTTP 1.1

// $this->xml_encoding = 'ISO-8859-1';

$this->xml_encoding = 'UTF-8';

}

 

好了,中文显示正常了。

WSDL也就那么回事,做过才知道,原来一切都是如此的简单。

另外就是打开soap扩展和不打开soap扩展,开发出来的服务器端是不一样的。

下面这篇文章是说当soap扩展打开的时候怎么样开发soap服务器端和客户端的。

http://article.yeeyan.org/view/jimmylee/5424?from_com

人要不断的学习,才能进步!!!