我使用 SoapClient
类进行 SOAP 交互。当 SOAP 响应包含长整数时,PHP 将其转换为科学记数法。我怎样才能获得这样的值并稍后在 SOAP 请求中使用它?
我无法使用 gmp,该值在我可以访问之前已转换为 float 。 gmp_init():无法将变量转换为 GMP - 类型错误
另请参阅:http://arstechnica.com/civis/viewtopic.php?t=100615
$wsld = 'http://example.com?wsdl';
$soap = new \SoapClient($wsld);
$result=$soap->foo();
echo $result->return->id; // echo 1.1122233344456E+14 instead of 111222333444555;
最佳答案
也许您可以制作 WSDL 的本地副本,并将遇到问题的字段的数据类型更改为字符串。
这样做的缺点是您必须跟踪 XML 的更改,但这是阻力最小的途径,将为您提供更直接的解决方案。
作为替代方案,在某种程度上更强大,请查看 SoapClient documentation您可以使用typemap选项。
The typemap option is an array of type mappings. Type mapping is an array with keys type_name, type_ns (namespace URI), from_xml (callback accepting one string parameter) and to_xml (callback accepting one object parameter).
也许是这个other answer可能会帮助您使用类型映射。如果不知道您的架构,就很难帮助您使用源代码,但该示例可能适用于您。
这是上面答案中发布的源代码的逐字副本:
function to_long_xml($longVal) {
return '<long>' . $longVal . '</long>';
}
function from_long_xml($xmlFragmentString) {
return (string)strip_tags($xmlFragmentString);
}
$client = new SoapClient('http://acme.com/products.wsdl', array(
'typemap' => array(
array(
'type_ns' => 'http://www.w3.org/2001/XMLSchema',
'type_name' => 'long',
'to_xml' => 'to_long_xml',
'from_xml' => 'from_long_xml',
),
),
));
关于php - 无法从 Web 服务响应中获取长整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28809644/