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

PHP调用SOAP接口时部分参数未正常发送的问题排查

排查PHP SOAP接口调用参数未正常发送的问题

看了你的代码和请求对比,问题主要出在两个地方:Sensores参数的结构错误,以及SOAP客户端的配置和目标服务不匹配,下面一步步给你解决:

1. 修复Sensores参数的结构

你当前构建的Sensores数组是两个独立的关联数组:

"Sensores" =>array ( ["Temperatura" => $temp], ["Luminosidad" => $lum] )

但目标服务期望的是每个pSensor节点包含Clave(键名)和Valor(值)两个子节点,所以需要把数组改成明确的嵌套结构:

"Sensores" => array(
    "pSensor" => array(
        array(
            "Clave" => "Temperatura",
            "Valor" => $temp
        ),
        array(
            "Clave" => "Luminosidad",
            "Valor" => $lum
        )
    )
)

这样PHP的SOAP客户端才能正确生成包含Clave和Valor的pSensor节点。

2. 匹配SOAP版本与命名空间

对比你的实际请求和期望请求:

  • 实际请求用的是SOAP 1.1的命名空间http://schemas.xmlsoap.org/soap/envelope/(SOAP-ENV前缀)
  • 期望请求用的是SOAP 1.2的命名空间http://www.w3.org/2003/05/soap-envelope(s前缀),并且目标服务的命名空间是http://unisolutions.com.ar/

所以在初始化SoapClient的时候,需要指定正确的SOAP版本和命名空间:

$wsdl = "你的WSDL地址";
$client = new SoapClient($wsdl, array(
    'soap_version' => SOAP_1_2, // 切换到SOAP 1.2
    'uri' => 'http://unisolutions.com.ar/', // 目标服务的命名空间
    'location' => '服务的实际调用地址', // 如果WSDL里没指定的话需要补充
    'trace' => true // 开启trace方便后续查看生成的请求
));

3. 验证修改后的请求

修改完参数和客户端配置后,调用接口时可以通过以下代码打印出生成的SOAP请求,确认是否符合预期:

$result = $client->LoginYInsertarEvento2($LoginYInsertarEvento2Params);
echo "请求XML:\n" . htmlspecialchars($client->__getLastRequest()) . "\n";

这样调整后,应该就能生成和期望一致的SOAP请求了,Sensores节点也会正确包含Clave和Valor字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 14:32:39