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

How to create a SOAP request using CDATA in PHP

我是 SOAP 新手,我想创建一个 SOAP 请求,如下所示。输入 xml (strEntrada) 必须在请求 header.

中发送

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

这是我构建的 PHP 脚本。但是没用。

<?php

$TokenValue = array( 'usuario' => "WSEMPJALISCO", 'password' => "AU77O", );
  
  $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 header 的解决方案。

这是运行良好的 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();
}
?>