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

PHP调用WSDL接口触发[HTTP] Unauthorized错误求助

问题:PHP调用WSDL接口时出现HTTP Unauthorized错误

我在PHP中尝试调用基于WSDL的接口,遇到了如下错误:

Fatal error: Uncaught SoapFault exception: [HTTP] Unauthorized

WSDL地址:https://servis.turkiye.gov.tr/services/g2g/kdgm/test/uetdsarizi?wsdl

我的index.php代码如下:

$istek = new SoapClient('https://servis.turkiye.gov.tr/services/g2g/kdgm/test/uetdsarizi?wsdl');

$auth = new stdClass();
$auth->Username = '999999';
$auth->Password = '999999testtest';
$header = new SoapHeader('https://servis.turkiye.gov.tr/services/g2g/kdgm/test/uetdsarizi?wsdl', 'AuthHeader', $auth, false);
$istek->__setSoapHeaders($header);

echo "<pre>";
print_r($istek->__getTypes());
echo "</pre>";

echo "<hr /><br /><br /><br />";

$sonuc = $istek->seyahatIzinKontrol(array(
    'wsuser' => array(
        'kullaniciAdi' => '999999',
        'sifre' => '999999testtest')
    ,
    'tcKimlikNo' => '15058023598')
);

if ($sonuc->seyahatIzinKontrol) {
    echo 'OK';
}else {
    echo 'ERROR';
};

实际报错信息详情:

Fatal error: Uncaught SoapFault exception: [HTTP] Unauthorized in C:\xampp\htdocs\index.php:72 Stack trace: #0 [internal function]: SoapClient->__doRequest('<?xml version="...', 'https://servis....', 'http://uetds.un...', 1, 0) #1 C:\xampp\htdocs\index.php(72): SoapClient->__call('seyahatIzinKont...', Array) #2 {main} thrown in C:\xampp\htdocs\index.php on line 72

请问问题出在哪里?


问题分析与解决方案

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

1. SoapHeader命名空间错误

创建SoapHeader时,第一个参数要求传入接口定义的命名空间URI,而非WSDL文件的URL。从报错信息中的http://uetds.un...以及WSDL的实际定义来看,正确的命名空间应为http://uetds.unsps.gov.tr/,你当前传入的WSDL地址不符合接口要求。

2. 重复传递认证信息

你同时通过SoapHeader和seyahatIzinKontrol方法参数传递了认证信息,但该接口仅需通过SoapHeader进行身份验证,方法参数中重复传递的wsuser属于冗余操作,甚至可能干扰接口的认证逻辑。

修正后的代码

try {
    // 创建SoapClient实例,开启trace方便调试请求响应内容
    $istek = new SoapClient('https://servis.turkiye.gov.tr/services/g2g/kdgm/test/uetdsarizi?wsdl', [
        'trace' => true,
        'exceptions' => true
    ]);

    // 使用正确的命名空间创建认证Header
    $auth = new stdClass();
    $auth->Username = '999999';
    $auth->Password = '999999testtest';
    $header = new SoapHeader('http://uetds.unsps.gov.tr/', 'AuthHeader', $auth, false);
    $istek->__setSoapHeaders($header);

    echo "<pre>";
    print_r($istek->__getTypes());
    echo "</pre>";

    echo "<hr /><br /><br /><br />";

    // 调用方法时仅传递业务参数,移除冗余的wsuser
    $sonuc = $istek->seyahatIzinKontrol([
        'tcKimlikNo' => '15058023598'
    ]);

    // 注意返回结果的字段名应为seyahatIzinKontrolResult(根据WSDL定义)
    if ($sonuc->seyahatIzinKontrolResult) {
        echo 'OK';
        print_r($sonuc);
    } else {
        echo 'ERROR';
    }
} catch (SoapFault $e) {
    // 打印详细错误及请求响应,方便排查
    echo "<pre>";
    echo "错误信息: " . $e->getMessage() . "\n";
    echo "请求XML: " . $istek->__getLastRequest() . "\n";
    echo "响应XML: " . $istek->__getLastResponse() . "\n";
    echo "</pre>";
}

额外排查建议

  • 确认999999和999999testtest是接口提供的有效测试凭据,无效凭据也会触发Unauthorized错误。
  • 检查PHP是否开启了openssl扩展,HTTPS协议的接口依赖该扩展才能正常通信。
  • 若仍报错,通过__getLastRequest()和__getLastResponse()查看实际发送的XML,对比WSDL定义确认参数结构是否完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 07:48:43