尝试在 null 上分配属性“username”

问题描述 投票:0回答:1

最近我们公司将 PHP 升级到 8.1,一个关键文件停止工作了。

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();
    $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;
}    

完整代码可以在 github 找到。我确实意识到,也基于这个问题,它与 SOAP 有关,并且与 PHP 7 向后不兼容。

如何修改代码才能继续工作?我不知道 SOAP 是如何工作的,我需要一段时间才能学习它,而我们需要公司应用程序才能继续工作。

php soap
1个回答
0
投票

这与 SOAP 无关。

$authHeader = new stdClass();
创建一个空的 stdClass 实例,它没有自己的属性。所以你不能给
$authHeader->UsernameToken->Username
分配任何东西 - 因为
$authHeader->UsernameToken
一开始就不存在。

首先尝试执行

$authHeader->UsernameToken = new stdClass();
(紧接在
$authHeader = new stdClass();
行之后)- 这样应该可以解决问题。

© www.soinside.com 2019 - 2024. All rights reserved.