Я пытаюсь перечислить элементы на eBay, используя их API, и у меня возникли проблемы с SoapClient
,
Обзор:
Я инициализирую SoapClient
как это:
$this->client = new SOAPClient($this->wsdlURL, array('trace' => 1, 'exceptions' => true, 'features' => SOAP_SINGLE_ELEMENT_ARRAYS));
Затем я звоню вот так:
$responseObj = $this->client->__soapCall($method, array($parameters), null, $header);
$parameters
это что-то вроде этого:
$parameters = array(
'Version' => 903,
'WarningLevel' => 'High',
'Item' => array(
// ....
'Storefront' => array(
'StoreCategoryID' => $storeCategoryId,
'StoreCategory2ID' => $storeCategoryId
);
// ....
);
);
куда $storeCategoryId
является 8046618015
,
Эта проблема
eBay говорит, что идентификатор категории неверен, поэтому выгрузка XML с использованием:
$this->client->__getLastRequest();
Я вижу следующее:
......
<ns1:Storefront>
<ns1:StoreCategoryID>2147483647</ns1:StoreCategoryID>
<ns1:StoreCategory2ID>2147483647</ns1:StoreCategory2ID>
</ns1:Storefront>
....
Понятно, что идентификатор магазина категории в запросе отличается от того, что я передал SoapClient
,
Так получилось, что 2147483647
это максимальный размер INT в PHP (или любого 32-разрядного числа со знаком в этом отношении, так как 2 ^ 32/2 = 2147483647), поэтому он появляется SoapClient
анализирует идентификатор категории как INT, и так как «число» больше, чем максимальный размер INT, в который он преобразуется.
Это моя теория.
Я пытался добавить цитаты вокруг $storeCategoryId
переменная при назначении его массиву, но это, похоже, не имеет значения.
Что вызывает эту проблему, и как я могу это исправить?
Я не понимаю, почему это работает, но после еще нескольких поисков я нашел добавление (float)
перед сохранением переменных SoapClient
от облажания их.
Других решений пока нет …