SoapClient 在发出请求时将字符串“8046618015”转换为“2147483647”(最大 INT 大小)?
SoapClient converts string "8046618015" to "2147483647" (maximum INT size) when making request?
我正在尝试使用 API 在 eBay 上列出商品,但 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 说类别 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),所以看起来 SoapClient
正在将类别 ID 解析为 INT,并且由于 "number" 大于 INT 的最大大小,这就是它转换的结果。
这是我的理论。
我尝试在将 $storeCategoryId
变量分配给数组时在其周围添加引号,但这似乎没有什么不同。
是什么导致了这个问题,我该如何解决?
我不明白为什么会这样,但经过更多搜索后,我发现在变量之前添加 (float)
可以防止 SoapClient
搞砸它们。
我正在尝试使用 API 在 eBay 上列出商品,但 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 说类别 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),所以看起来 SoapClient
正在将类别 ID 解析为 INT,并且由于 "number" 大于 INT 的最大大小,这就是它转换的结果。
这是我的理论。
我尝试在将 $storeCategoryId
变量分配给数组时在其周围添加引号,但这似乎没有什么不同。
是什么导致了这个问题,我该如何解决?
我不明白为什么会这样,但经过更多搜索后,我发现在变量之前添加 (float)
可以防止 SoapClient
搞砸它们。