微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 PHP 中使用 CDATA 创建 SOAP 请求

如何解决如何在 PHP 中使用 CDATA 创建 SOAP 请求

我是 SOAP 新手,我想创建一个 SOAP 请求,如下所示。输入 xml (strEnTrada) 必须在请求头中发送。

这是运行良好的屏幕截图。

enter image description here

这是我构建的 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();
}
?>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。