【发布时间】: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 文档中找不到有关设置正文的任何内容。
【问题讨论】: