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
相关产品推荐
相关产品推荐

