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

PHP调用SOAP接口时SecurityToken处理不当致请求失败的解决方法

问题解决思路及修正代码

你的代码存在两个核心问题,导致了HTTP Bad Request错误:

  1. SecurityToken的位置错误:服务器要求将Token放在SOAP请求的Header中(对应SOAPUI里的<soapenv:Header>节点),但你把它作为接口参数传递了。
  2. 请求参数结构不匹配:SOAPUI的请求Body里,orderId是嵌套在<key>节点下的,但你的PHP代码直接将orderId作为顶层参数传入,不符合服务器的参数格式要求。

修正后的PHP代码

<?php
$wsdl = "http://abcd.org/abcdServer/webservices/auth/ExternalOrderWebService?wsdl"; 

$client = new SoapClient($wsdl, array(
    'soap_version' => SOAP_1_1,
    'exceptions' => 1,
    'trace' => 1
));

try {
    // 1. 构造SOAP Header,放置SecurityToken
    // 注意:$namespace需要匹配WSDL中定义Header的命名空间,可参考SOAPUI请求里的mis命名空间
    $namespace = "http://abcd.webservices.xyz.abcd.eu/";
    $soapHeader = new SoapHeader(
        $namespace,
        'SecurityToken',
        'd989aaf6-ea3c-429e-996c-4722b1d2ce3e',
        false
    );
    $client->__setSoapHeaders($soapHeader);

    // 2. 构造符合要求的请求参数结构
    $args = array(
        'key' => array(
            'orderId' => '00119-23'
        )
    );

    // 调用接口
    $result = $client->exportOrder($args);
    print_r($result);

} catch (SoapFault $e) {
    echo "错误信息: {$e}<br>";
    // 打印请求/响应XML用于调试(开启trace=1才有效)
    echo "请求XML: " . htmlspecialchars($client->__getLastRequest()) . "<br>";
    echo "响应XML: " . htmlspecialchars($client->__getLastResponse()) . "<br>";
}
?>

关键说明

1. SOAP Header的正确设置

通过SoapHeader类创建包含SecurityToken的请求头,再调用__setSoapHeaders将其绑定到SOAP客户端,这样发送的请求就会和SOAPUI的结构一致,把Token放在Header区域。

  • 如果仍然报错,优先检查$namespace是否正确:可以查看WSDL文件中的<wsdl:header>定义,或者对比__getLastRequest()输出的XML和SOAPUI的XML,调整命名空间。

2. 参数结构修正

服务器期望exportOrder方法接收一个包含key的对象,key内部才是orderId,所以参数必须嵌套成['key' => ['orderId' => 'xxx']]的格式,和SOAPUI中的<key><orderId>...</orderId></key>对应。

3. 调试技巧

开启trace => 1后,使用__getLastRequest()和__getLastResponse()可以打印实际发送和接收的XML,和SOAPUI的请求对比,能快速定位命名空间、参数结构等问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 09:58:12