【问题标题】:Attempt to assign property on null尝试在 null 上分配属性
【发布时间】:2022-07-08 02:28:22
【问题描述】:

我正在尝试在 PHP 中创建一个肥皂请求,并且对这两个请求都很陌生。我有:

<?php

define("PRODUCTION_KEY", "YOUR_PRODUCTION_KEY_HERE");
define("PRODUCTION_PASS", "YOUR_PRODUCTION_PASS_HERE");
define("BILLING_ACCOUNT", "YOUR_ACCOUNT_HERE");
define("REGISTERED_ACCOUNT", "YOUR_ACCOUNT_HERE");
define("USER_TOKEN", "YOUR_USER_TOKEN_HERE");

function createPWSSOAPClient(){
  $client = new SoapClient( "./wsdl/trackingservice.wsdl", 
                            array   (
                                    'trace'         =>  true,
                                    'location'  =>  "https://example.com",
                                    'uri'               =>  "http://example.com/datatypes/v1",
                                    'login'         =>  PRODUCTION_KEY,
                                    'password'  =>  PRODUCTION_PASS
                                  )
                          );
  //Define the SOAP Envelope Headers
  $headers[] = new SoapHeader ( 'http://example.com/datatypes/v1', 
                                'RequestContext', 
                                array (
                                        'Version'           =>  '1.2',
                                        'Language'          =>  'en',
                                        'GroupID'           =>  'xxx',
                                        'RequestReference'  =>  'Rating Example',
                                        'UserToken'         =>  USER_TOKEN
                                      )
                              ); 
  $client->__setSoapHeaders($headers);

  return $client;
}

$client = createPWSSOAPClient();
$request->PINS = array();
$request->PINs->PIN->Value = "1234567";
$response = $client->TrackPackagesByPin($request);

请求本身应如下所示:


/** 
  * SOAP Request Envelope (Request Made from the SOAP Client)
  * <?xml version="1.0" encoding="UTF-8"?>
  * <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://example.com/datatypes/v1"><SOAP-ENV:Header><ns1:RequestContext><ns1:Version>1.0</ns1:Version><ns1:Language>en</ns1:Language><ns1:GroupID>xxx</ns1:GroupID><ns1:RequestReference>Rating Example</ns1:RequestReference></ns1:RequestContext></SOAP-ENV:Header><SOAP-ENV:Body><ns1:TrackByPIN><ns1:PINs><ns1:PIN><ns1:Value>1234567</ns1:Value></ns1:PIN></ns1:PINs></ns1:TrackByPIN></SOAP-ENV:Body></SOAP-ENV:Envelope>
**/

但是,当我运行上面的代码时,我得到: PHP Fatal error: Uncaught Error: Attempt to assign property "PINS" on null 我意识到该请求为空,但我不知道将其设置为什么,因为我确实需要 SOAP-ENV:Body,但在 SOAP 文档中找不到有关设置正文的任何​​内容。

【问题讨论】:

    标签: php soap


    【解决方案1】:

    我有一些问题。在 php 5.4 中代码工作,在 php 8.1 上没有

    【讨论】:

    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    【解决方案2】:

    此问题与有据可查的PHP 8 中向后不兼容的更改(请参阅here)有关。

    基本上,PHP 即因为对象不存在,你认识的东西)。具体来说:

    • 许多警告已转换为错误异常:
      • 试图写入非对象的属性。以前,这为 null、false 和空字符串隐式创建了一个 stdClass 对象。 (reference)

    要解决,设置要创建的对象的属性,而不是引用 null 的新属性:

    $client = createPWSSOAPClient();
    
    $request->PINS->PIN->Value->"1234567";
    
    $response = $client->TrackPackagesByPin($request);
    

    【讨论】:

      猜你喜欢
      • 2021-06-08
      • 2021-11-03
      • 2022-11-18
      • 2021-08-10
      • 2021-09-14
      • 2021-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多