最近我们公司将 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 是如何工作的,我需要一段时间才能学习它,而我们需要公司应用程序才能继续工作。
这与 SOAP 无关。
$authHeader = new stdClass();
创建一个空的 stdClass 实例,它没有自己的属性。所以你不能给 $authHeader->UsernameToken->Username
分配任何东西 - 因为 $authHeader->UsernameToken
一开始就不存在。
首先尝试执行
$authHeader->UsernameToken = new stdClass();
(紧接在 $authHeader = new stdClass();
行之后)- 这样应该可以解决问题。