SoapClient转换字符串" 8046618015"到" 2147483647" (最大INT大小)请求时?

时间:2015-01-11 19:02:37

标签: php soap soap-client ebay ebay-api

我尝试使用他们的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
            );
        // ....
    );
);

$storeCategoryId8046618015的位置。

问题


eBay说类别ID不正确,所以使用以下方式转储XML:

$this->client->__getLastRequest();

我看到以下内容:

......
<ns1:Storefront>
    <ns1:StoreCategoryID>2147483647</ns1:StoreCategoryID>
    <ns1:StoreCategory2ID>2147483647</ns1:StoreCategory2ID>
</ns1:Storefront>
....

显然,请求中的商店类别ID与我通过的SoapClient不同。

恰好2147483647是PHP中INT的最大大小(或者任何有符号的32位数,因为2 ^ 32/2 = 2147483647),所以它出现{{1}将类别ID解析为INT,因为&#34;数字&#34;大于它转换为的INT的最大大小。

这是我的理论。

我尝试在将SoapClient变量分配给数组时添加引号,但这似乎没有什么区别。

导致此问题的原因是什么,我该如何解决?

1 个答案:

答案 0 :(得分:1)

我不明白为什么会这样,但经过一些搜索后我发现在变量保持(float)之前添加SoapClient使它们搞砸了。