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

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

1 ответ

Решение

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

Другие вопросы по тегам