几个月前我问过这样的问题,但问题是WebService无法正常工作。现在它工作得很好,我仍然在提出简单的请求时遇到问题。
首先,我用http://www.validwsdl.com/尝试了它
WS是http://amibcertifica.amib.com.mx:9090/axis2/services/JpaWebServicesAmib?wsdl
你可以自己尝试一下。它适用于该网站。
现在我正在尝试使用NuSOAP发出请求,我收到此错误:namespace mismatch require http://ws.mobius.amib found http://tempuri.org
您可以在此处查看整个错误:http://dev.etic.com.mx/bmv/test.php
我的代码如下:
<?php
require_once('nusoap/lib/nusoap.php');
$url = "http://amibcertifica.amib.com.mx:9090/axis2/services/JpaWebServicesAmib?wsdl";
try
{
$client = new nusoap_client($url);
$err = $client->getError();
if ($err) {
// Display the error
echo '<h2>Constructor error</h2><pre>' . $err . '</pre>';
// At this point, you know the call that follows will fail
}
$result = $client->call('findAllComprobanteOperacion');
}
catch (SoapFault $e)
{
echo 'Error0'.$e->getMessage() . "\n";
}
echo '<pre>';print_r( $result );
echo $client->debug_str;
?>
NuSOAP版本:$Id: nusoap.php,v 1.123 2010/04/26 20:15:08 snichol Exp $
我一直在网上寻找如何做到这一点,我完全无能为力,所以任何帮助都非常感激。 提前谢谢。
答案 0 :(得分:1)
这比我想象的要简单。我只需要将nusoap_client的第二个参数设置为TRUE(因为它默认为FALSE)。所以,它是$client = new nusoap_client($url, TRUE);
而已。
不管怎样,谢谢。
答案 1 :(得分:1)
通过将其声明为参数来设置命名空间。默认情况下,命名空间设置为&#34; http://tempuri.org&#34; (某些soap服务器需要额外的正斜杠,例如&#39; http://tempuri.org/&#39;)。因此,当您使用call函数时,可以在第三个参数中设置名称空间,如下所示:
$result = $client->call('findAllComprobanteOperacion', null, 'http://tempuri.org/');
您也可以声明您的参数并设置SoapAction,第四个参数,如下所示:
$result = $client->call('findAllComprobanteOperacion', array('Argument1' => 'value1', 'Argument2' => 'value2'), 'http://tempuri.org/', 'SoapActionHere');
默认情况下,NuSoap还会强制使用1000到9999之间的随机数作为命名空间的前缀(变量名)。这也可能是服务器不喜欢的。没有内置的方法来实际纠正这个问题。我只是编辑了nusoap.php来解决这个问题。在第7431行(或附近),您将找到:
$this->debug("wrapping RPC request with encoded method element");
if ($namespace) {
// http://www.ws-i.org/Profiles/BasicProfile-1.1-2004-08-24.html R2735 says rpc/literal accessor elements should not be in a namespace
$payload = "<$nsPrefix:$operation xmlns:$nsPrefix=\"$namespace\">" .
$payload . "</$nsPrefix:$operation>";
} else {
$payload = "<$operation>" . $payload . "</$operation>";
}
将其更改为:
if ($namespace) {
$payload = "<$operation xmlns=\"$namespace\">" .
$payload . "</$operation>";
} else {
$payload = "<$operation>" .
$payload . "</$operation>";
}