首页 > 解决方案 > 肥皂电话和 __doRequest

问题描述

我正在调用网络服务,但我无法得到答案。我需要一个特殊的“信封”,所以我自己创建了一个并用它来调用 Web 服务。这就是我所做的一切:

$sobre  = '<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">';
$sobre .= '<Body><cargaTituloElectronicoRequest xmlns="http://ws.web.mec.sep.mx/schemas">';
$sobre .= '<nombreArchivo>' . $arch . '</nombreArchivo>';
$sobre .= '<archivoBase64>' .$xml . '</archivoBase64>';
$sobre .= '<autenticacion><usuario>' . $user . '</usuario><password>' . $pass . '</password></autenticacion>';
$sobre .= '</cargaTituloElectronicoRequest></Body></Envelope>';

$location_URL="https://metqa.siged.sep.gob.mx/met-ws/services/TitulosElectronicos.wsdl";
$action      ="https://metqa.siged.sep.gob.mx/met-ws/services/TitulosElectronicos.wsdl/cargaTituloElectronico";

$client = new SoapClient($location_URL, array('trace' => 1));
try{
        $resultado = $client->__doRequest($sobre, $location_URL, $action, 'SOAP_1_2', 0);
}catch (SoapFault $exception){
    var_dump(get_class($exception));
    var_dump($exception);
    $numLote = 0;
}
echo "REQUEST:\n" . htmlentities($client->__getLastRequest()) . "\n";

我没有收到 __getLastRequest(),(不知道为什么)......和“ $action”我已经使用了方法(' cargaTituloElectronico')但它不起作用。
我无法使用$client->cargaTituloElectronico($params),因为服务器不接受自动生成的信封。
非常感谢您对我的帮助。提前致谢

标签: phpweb-servicessoap

解决方案


这个问题的解决方法:

声明一个扩展 SoapClient 的新类,然后使用您自己的 evelope 重载 __doRequest 方法。

而已。有效。


推荐阅读