- 论坛徽章:
- 0
|
最近因为要和别人的系统整合,所以要用到webservice,我的是php做的,另一方是jsp做的。所以要用到web service来做。网上看了不少资料。一点点的在试。就碰到了问题
soap_client.php
<?
require('nusoap.php');
//要发送的变量
$myString="world";
//parameters must be passed as an array
//变量必须要转换成数组的形式
$parameters=array($myString);
//创建一个soapclient对象,参数是server的URL
$s=new soapclient('https://192.168.1.165/webservice/soap_server.php');
//调用远程方法,返回值存放在$result
//返回值为PHP的变量类型,如string, integer, array
$result=$s->call('echoString', $parameters);
//错误检测
if (!$err=$s->getError()) {
echo 'Result: '.$result; //success
} else {
echo 'Error: '.$err;
}
//调试,以下是SOAP请求(request)和回应(response)的报文,包括HTTP头
echo "<xmp>".$s->request."</xmp>";
echo "<xmp>".$s->response."</xmp>";
?>
soap_server.php
<?
require('nusoap.php');
//创建一个新的soap_server对象,并注册允许远程调用的方法
$s=new soap_server;
$s->register('echoString');
$s->register('echoArray');
/*
[文章中说: 缺少了注册这一步,任何PHP函数都将可以进行远程调用,这将是一个极大的安全隐患。但是我尝试过注册是必须的。而且只有将结果return的函数才能直接声明为远程方法,比如echo()就不行,而strtolower()就可以。]
*/
function echoString($inputString) {
//类性检查
if(is_string($inputString)) {
return "Hello, ".$inputString;
} else {
//soap_fault类用于产生错误信息
return new soap_fault('client', '', 'The parameter to this service must be a string.');
//soap_fault(faultcode, faultactor, faultstring, faultdetail);
//上面是错误处理类的构造函数的格式
//faultcode 必须值。可以设置为client或server,来表明错误发生在哪一端。
//faultactor 在NuSOAP中尚未实现。
//faultstring 错误信息。
//faultdetail 详细错误信息。你可以使用XML标记。
//除了构造函数外,soap_fault类还有一个serialize()方法
//它将错误信息序列化,然后返回一个完整的SOAP报文,范例:
/*
$fault = new soap_fault('client', '', 'The inputString parameter must not be empty');
echo $fault->serialize();
*/
}
}
//演示数组类型的使用
function echoArray($inputString) {
return $inputString[0]."+".$inputString[1];
}
//最后一步是把所有的收到的post数据都传递给SOAP server的service方法。它将处理请求,并调用相应的函数。
$s->service($HTTP_RAW_POST_DATA);
?>
我 运行以后错误是:Error: CURL Extension, or OpenSSL extension w/ PHP version >= 4.3 is required for HTTPS<xmp></xmp><xmp></xmp> 可我的版本已经是4.3.9了
[ 本帖最后由 xiangcomein 于 2006-11-13 10:27 编辑 ] |
|