这几天在做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
人要不断的学习,才能进步!!!
本文出自 “xp寞踪” 博客,谢绝转载!