英语不是我的母语所以请耐心等待。
我需要通过WebService向其他公司报告某些邮件传递的状态。我正在使用PHP + NuSoap,我是PHP的新手,这个库帮助我保持简单,我的代码看起来像这样:
require_once '../nusoap/lib/nusoap.php';
Class Cliente{
var $server;
public function __construct(){
$this->server = 'https://the-other-company.com/services/PksiryacwebMgrTarjetasSubsi?wsdl';
}
function client_process($data){
$cliente = new nusoap_client($this->server,'wsdl','','','','');
$err = $cliente->getError();
if ($err) { echo 'Error en Constructor' . $err ; }
$response = $cliente->call('prwebActualizaCorresponden',$data,'','', false,true); //OK
return $response;
}
}
其中$data
是一个字符串数组,并且WebService服务器用于返回响应(总是),而不是回复任何内容。
当我打电话给WebService管理员时,他告诉我用SoapUI测试它,然后我发现问题出在WSDL上,因为它指的是私有IP地址(172.20.8.152),它只能从内部加入其他公司局域网,而不是我告诉工作的IP(the-other-company.com)。
<wsdl:service name="PksiryacwebMgr_Tarjetas_SubsiService">
<wsdl:port binding="impl:PksiryacwebMgr_Tarjetas_SubsiSoapBinding" name="PksiryacwebMgr_Tarjetas_Subsi">
<wsdlsoap:address location="http://172.20.8.152/services/PksiryacwebMgrTarjetasSubsi"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
在SoapUI中,这个问题很容易解决使用正确的IP设置另一个 EndPoint ,但是如何在NuSoap中执行此操作?
编辑:解决方法是制作我自己的wsdl / xml,但这不是主意。
提前致谢。
答案 0 :(得分:0)
使用函数setEndpoint,它在nusoap.php的7873行周围定义:
/**
* sets the SOAP endpoint, which can override WSDL
*
* @param string $endpoint The endpoint URL to use, or empty string or false to prevent override
* @access public
*/
function setEndpoint($endpoint)
{
$this->debug("setEndpoint(\"$endpoint\")");
$this->forceEndpoint = $endpoint;
}
在您的测试代码中可以通过这种方式使用:
require_once '../nusoap/lib/nusoap.php';
Class Cliente{
var $server;
var $endPoint;
public function __construct(){
$this->server = 'https://the-other-company.com/services/PksiryacwebMgrTarjetasSubsi?wsdl';
$this->endPoint = 'http://172.20.8.152/services/PksiryacwebMgrTarjetasSubsi';
}
function client_process($data){
$cliente = new nusoap_client($this->server,'wsdl','','','','');
$cliente->setEndpoint($this->endPoint);
$err = $cliente->getError();
if ($err) { echo 'Error en Constructor' . $err ; }
$response = $cliente->call('prwebActualizaCorresponden',$data,'','', false,true); //OK
return $response;
}
}