php - 无法从 Web 服务响应中获取长整数

标签 php soap long-integer

我使用 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/

相关文章:

c - 如何在 C 中对 unsigned long 进行位移位?

php - MySQL/PHP - 返回最接近的数字匹配

php - symfony 查询问题

PHP 替换 & > & 不工作

python - 在某些情况下使 zeep 使用默认命名空间而不是命名命名空间

java - 尝试与端点通信时无法识别 WSDL 类型

php - PHP Soap 应用程序的 cURL 与 __SoapClient

java - InputString 中的 NumberFormatException

JavaScript 到 PHP 函数

java - 如何在 Java 和 PostgreSQL 中处理 32 位数字?