SoapClient преобразует строку «8046618015» на «2147483647» (максимальный размер INT) при оформлении запроса?

Я пытаюсь перечислить элементы на 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 переменная при назначении его массиву, но это, похоже, не имеет значения.

Что вызывает эту проблему, и как я могу это исправить?

0

Решение

Я не понимаю, почему это работает, но после еще нескольких поисков я нашел добавление (float) перед сохранением переменных SoapClient от облажания их.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]