PHP SoapClient 参数仅在我使用 StdClass 时有效
PHP SoapClient arguments only work when i use StdClass
我正在尝试使用 SOAP API DOC WSDL 并且出于某种原因请求总是失败,除非我使用 stdClass 实例作为参数,并且我正在尝试找到解决此问题的方法因为我只是不喜欢这样做,更愿意使用关联数组。
/* I'd like to get rid of these two classes if possible */
class countriesRequest{
public $companyCode = "9999";
public $allCountries = true;
}
class getCountries{
public $objRequest;
function __construct()
{
$this->objRequest = new countriesRequest;
}
}
class Countries extends ApiMethod
{
/**
* @var string API Endpoint
*/
private $endpoint;
public function getAllCountries() {
$client = new SoapClient("http://jsserver20.jimpisoft.pt/Rentway_WS_Demo/getCountries.asmx?wsdl", ['trace' => 1]);
try {
$result = $client->getCountries(new getCountries());
var_dump($result->getCountriesResult->countries->any);
} catch(SoapFault $exception) {
dd($client->__getLastRequest());
}
}
}
每当我尝试使用关联数组时,SOAP 服务器 returns 一个错误 "Object reference not set to an instance of an object." 所以对于那些对 SOAP 更有经验的人来说,在这种情况下是否需要此服务 我使用 stdClasses 作为参数?或者有什么方法可以使用 assoc 数组?
您可以创建关联数组,然后将其转换为 stdClass
与:
$object = json_decode(json_encode($yourAssociativeArray));
或者如果不是嵌套数组(只是键值),您可以这样做:
$object = (object)$yourAssociativeArray;
错误信息告诉你参数必须可以作为参考。为此,您必须先将其分配给一个变量。
$getCountriesRequest = new getCountries();
$getCountriesResponse = $client->getCountries($request);
您可以在此处阅读有关通过引用传递的信息:http://php.net/manual/en/language.references.pass.php
我正在尝试使用 SOAP API DOC WSDL 并且出于某种原因请求总是失败,除非我使用 stdClass 实例作为参数,并且我正在尝试找到解决此问题的方法因为我只是不喜欢这样做,更愿意使用关联数组。
/* I'd like to get rid of these two classes if possible */
class countriesRequest{
public $companyCode = "9999";
public $allCountries = true;
}
class getCountries{
public $objRequest;
function __construct()
{
$this->objRequest = new countriesRequest;
}
}
class Countries extends ApiMethod
{
/**
* @var string API Endpoint
*/
private $endpoint;
public function getAllCountries() {
$client = new SoapClient("http://jsserver20.jimpisoft.pt/Rentway_WS_Demo/getCountries.asmx?wsdl", ['trace' => 1]);
try {
$result = $client->getCountries(new getCountries());
var_dump($result->getCountriesResult->countries->any);
} catch(SoapFault $exception) {
dd($client->__getLastRequest());
}
}
}
每当我尝试使用关联数组时,SOAP 服务器 returns 一个错误 "Object reference not set to an instance of an object." 所以对于那些对 SOAP 更有经验的人来说,在这种情况下是否需要此服务 我使用 stdClasses 作为参数?或者有什么方法可以使用 assoc 数组?
您可以创建关联数组,然后将其转换为 stdClass
与:
$object = json_decode(json_encode($yourAssociativeArray));
或者如果不是嵌套数组(只是键值),您可以这样做:
$object = (object)$yourAssociativeArray;
错误信息告诉你参数必须可以作为参考。为此,您必须先将其分配给一个变量。
$getCountriesRequest = new getCountries();
$getCountriesResponse = $client->getCountries($request);
您可以在此处阅读有关通过引用传递的信息:http://php.net/manual/en/language.references.pass.php