将EndPoint更改为NuSoap客户端

时间:2017-02-11 14:37:11

标签: php web-services soap nusoap

英语不是我的母语所以请耐心等待。

我需要通过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,但这不是主意。

提前致谢。

1 个答案:

答案 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;
    }
}