php json_decode函数导致支付验签失败的坑

前一段时间写了一篇《PHP数组转换成json字符串包含转义字符导致支付签名失败》的文章,记录了php的json_encode函数对\的处理与其他语言处理不一致,导致验签业务代码失败。

今天来记录与json_encode对应的函数json_decode导致验签业务失败的情况。

先看一个json格式的字符串:

1
'{"name": "wuwei", "total_money": "4.50", "discount_money": 4.60}'

通过json_decode函数解析:

1
var_dump(json_decode('{"name": "wuwei", "total_money": "4.50", "discount_money": 4.60}', true));

得到的结果:

1
2
3
4
5
array(3) {
["name"]=>string(5) "wuwei"
["total_money"]=>string(4) "4.50"
["discount_money"]=>float(4.6)
}

这里发现json_decode之后4.60变成了4.6,如果是当数字处理没有什么问题。但是对于RSA验签的问题就大了,在项目签名中第三方用的是4.60来生成签名,而在我们这用了4.6来验签,结果自然是失败的。