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

PHP8.1升级后SOAP代码报错"Attempt to assign property "username" on null"修复咨询

问题解决:PHP 8.1下SOAP调用报错"Attempt to assign property "username" on null"

错误原因

PHP 7.4及更高版本(包括8.1)严格禁止对未初始化的嵌套对象属性直接赋值。原代码中$authHeader是一个空的stdClass,但$authHeader->UsernameToken并未被初始化(默认是null),直接给$authHeader->UsernameToken->Username赋值会触发致命错误。

修改后的代码

function checkVATGR($username,$password,$AFMcalledby="",$AFMcalledfor)
{
    $client = new SoapClient( "https://www1.gsis.gr/webtax2/wsgsis/RgWsPublic/RgWsPublicPort?WSDL",array('trace' => true) );
    //$version = $client->rgWsPublicVersionInfo();
    $authHeader = new stdClass();
    // 先初始化UsernameToken为stdClass对象
    $authHeader->UsernameToken = new stdClass();
    $authHeader->UsernameToken->Username = $username;
    $authHeader->UsernameToken->Password = $password;
    $Headers[] = new SoapHeader('http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd', 'Security', $authHeader,TRUE);
    $client->__setSoapHeaders($Headers);
    $result = $client->rgWsPublicAfmMethod(
        array(
            'afmCalledBy'=>$AFMcalledby,
            'afmCalledFor'=>$AFMcalledfor,
            )
        );
    return $result;
}    

关键修改点

  • 新增$authHeader->UsernameToken = new stdClass();:提前创建UsernameToken对象,确保后续对其属性赋值时,它不是null。
  • 移除了变量外的冗余引号("$username"改为$username),代码更规范且不影响功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 06:55:07