You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PHP中使用CDATA创建SOAP请求并将XML放入请求头

代码调整方案

核心问题说明

现有代码主要有3个导致请求失败的问题:

  1. 密码字符串使用双引号包裹,其中的$符号会被PHP识别为变量前缀做解析,实际发送的密码值和预期不符
  2. strEntrada参数使用XSD_ANYXML类型封装不符合接口要求,该参数本身是字符串类型的请求头,不需要指定为XML节点类型
  3. 额外包裹的CDATA标签会导致接口接收的XML内容不符合格式要求,接口要求的是直接传入XML字符串,不需要额外套CDATA

修正后完整代码

<?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));

// 去掉外层的CDATA包裹,直接保留XML内容
$xml = '<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);
// 直接传字符串即可,不需要用SoapVar封装为XSD_ANYXML
$headers[] = new SoapHeader('http://tempuri.org/', 
                          'strEntrada',
                          $xml);

$_clientConsultas->__setSoapHeaders($headers);

try {
  $result = $_clientConsultas->ConsultaRegistraPersona();
  $data = $result->strSalida;
  echo $data;
  // 调试时可以打开下方注释输出请求内容确认格式
  // echo "REQUEST:\n" . $_clientConsultas->__getLastRequest() . "\n";
} catch (SoapFault $fault) {
  echo 'SoapFault exception: ',  $fault->getMessage(), "\n";
  // 调试时可以打开下方注释输出请求内容定位问题
  // echo "REQUEST:\n" . $_clientConsultas->__getLastRequest() . "\n";
} catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
}
?>

内容的提问来源于stack exchange,提问作者supernova

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 11:54:05