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

PHP中如何使用SoapClient构造指定格式的SOAP请求调用接口

PHP SoapClient 调用SOAP接口修复方案

你代码的核心问题是SOAP头的结构、名称和官方要求的请求格式不匹配,修正方案如下:

核心错误说明

  1. SOAP头节点名称错误:官方要求的头节点名称是Header,你代码中错误填写为RequestorCredentials
  2. 头参数层级错误:你代码中头参数多套了一层SamplingSoapHeader,官方要求Header节点下直接放置UserName和Password节点
  3. 缺少调试参数:未开启请求 trace 无法核对实际发送的请求内容是否符合要求

修正后可运行代码

<?php
$username = 'USERNAME';
$password = 'PASSWORD'; // 确认此处密码和接口要求一致

$soapURL = "http://www.example.com/interface.asmx?WSDL";

// 初始化时开启调试参数,方便出错排查
$client = new \SoapClient($soapURL, [
    'trace' => true,
    'exceptions' => true,
]);

// 头参数直接声明用户名、密码,无需额外外层
$auth = [
    'UserName' => $username,
    'Password' => $password,
];

// 第二个参数传入正确的头节点名称Header
$header = new \SoapHeader('http://www.example.com/interface/', 'Header', $auth);
$client->__setSoapHeaders($header);

try {
    $response = $client->GetExampResult(["rollNumber" => "1703011"]);
    print_r($response);
} catch (\SoapFault $e) {
    // 出错时打印错误信息和实际发送的请求,直接和官方示例对比即可快速定位问题
    echo "接口调用错误:" . $e->getMessage() . PHP_EOL;
    echo "实际发送的请求XML:" . PHP_EOL;
    echo htmlspecialchars($client->__getLastRequest()) . PHP_EOL;
}

额外排查要点

  • 若调用仍然异常,直接对比__getLastRequest()输出的XML和官方给的示例请求,差异部分就是需要调整的内容
  • 确认接口地址、用户名、密码、rollNumber等参数值的正确性,避免参数值错误导致调用失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 08:45:08