问题描述
我是 SOAP 新手,我想创建一个 SOAP 请求,如下所示。输入 xml (strEnTrada) 必须在请求头中发送。
这是运行良好的屏幕截图。
这是我构建的 PHP 脚本。但它不起作用。
<?PHP
$TokenValue = array( 'usuario' => "WSEMPJALISCO",'password' => "AU77O$21",);
$providerConsultas = 'http://www5.abaseguros.com/PersonaConnect/PCRegistro.svc?wsdl';
$_clientConsultas = new SoapClient($providerConsultas,array('trace' => true,"exceptions" => true));
$xml = '<![CDATA[ <XML>
<DP>
<TP>0</TP>
<FISICA>
<RFC>CARJ800701</RFC>
<HCVE></HCVE>
<PNOM>JORGE</PNOM>
<SNOM>LEONARDO</SNOM>
<APP>CARO</APP>
<APM>RAMIREZ</APM>
<SEXO>1</SEXO>
<EDOCIVIL>1</EDOCIVIL>
</FISICA>
<DOMICILIO>
<TIPODIR>1</TIPODIR>
<CALLE>VALLE DEL YAQUI 2177</CALLE>
<NUMEXT>350</NUMEXT>
<NUMINT></NUMINT>
<COL>PARQUES DE LA CA-ADA</COL>
<CP>45720</CP>
<POB>SALTILLO</POB>
</DOMICILIO>
<TELEFONO>
<LADA>33</LADA>
<NUMERO>26766476</NUMERO>
</TELEFONO>
<CELULAR>
<LADA>33</LADA>
<NUMERO>26766476</NUMERO>
</CELULAR>
<CORREO>LEONARDO.CARO@outlook.com</CORREO>
</DP>
</XML> ]]>';
$headers = array();
$headers[] = new SoapHeader('http://tempuri.org/','Token',$TokenValue);
$headerVar = new SoapVar($xml,XSD_ANYXML);
$headers[] = new SoapHeader('http://tempuri.org/','strEnTrada',$headerVar);
$_clientConsultas ->__setSoapHeaders($headers);
try {
$result = $_clientConsultas->ConsultaRegistraPersona(); // $xml variable with the required XML
// Results are obtained
$data = $result->strSalida;
echo $data;
} catch (SoapFault $fault) {
// catches soap faults
echo 'SoapFault exception: ',$fault->getMessage(),"\n";
} catch (Exception $e) {
echo 'Caught exception: ',$e->getMessage(),"\n";
}
?>
谁能帮我用PHP发送上述soap请求?谢谢。
解决方法
最后,我找到了如何将 XML CDATA 添加到 soap 标头的解决方案。
这是运行良好的 PHP 脚本。
<?php
$headers = array();
class TokenHeader {
public $usuario = "******"; // usuario con permisos para usar el servicio de conexión
public $password = "******"; // password del usuario con permisos para usar el servicio de conexión
public $referencia = "";
}
$TokenHeader = new TokenHeader;
$headers[] = new SOAPHeader('http://tempuri.org/','Token',$TokenHeader);
$strEntrada = "<XML>
<DP>
<TP>0</TP>
<FISICA>
<RFC>CARJ800701</RFC>
<HCVE></HCVE>
<PNOM>JORGE</PNOM>
<SNOM>LEONARDO</SNOM>
<APP>CARO</APP>
<APM>RAMIREZ</APM>
<SEXO>1</SEXO>
<EDOCIVIL>1</EDOCIVIL>
</FISICA>
<DOMICILIO>
<TIPODIR>1</TIPODIR>
<CALLE>VALLE DEL YAQUI 2177</CALLE>
<NUMEXT>350</NUMEXT>
<NUMINT></NUMINT>
<COL>PARQUES DE LA CA-ADA</COL>
<CP>45720</CP>
<POB>SALTILLO</POB>
</DOMICILIO>
<TELEFONO>
<LADA>33</LADA>
<NUMERO>26766476</NUMERO>
</TELEFONO>
<CELULAR>
<LADA>33</LADA>
<NUMERO>26766476</NUMERO>
</CELULAR>
<CORREO>LEONARDO.CARO@OUTLOOK.COM</CORREO>
</DP>
</XML>";
$headers[] = new SOAPHeader('http://tempuri.org/','strEntrada',$strEntrada);
$providerConsultas = "http://www5.abaseguros.com/PersonaConnect/PCRegistro.svc?wsdl";
$_clientConsultas = new SoapClient($providerConsultas,array("trace" => true));
$_clientConsultas->__setSoapHeaders($headers);
try { // Abrimos un try..catch para obtener los mensajes de error
$result = $_clientConsultas->ConsultaRegistraPersona(array('strEntrada' => ""));
$data = $result->strSalida;
echo $data;
} catch (Exception $e) { // En caso de producirse un error
echo $e->getMessage();
}
?>