跨语言-同样的加密方式,签名逻辑,加解密不通过及签名错误?(java、python--php)
一、入坑背景
在平时业务处理中,对接第三方服务是一个最常见的业务,通常我们想的都是拿着对方的对接文档,根据对方要求传相应参数,即可对接成功,这时候PM会自信且微信着对你说:这么简单的事情,给个排期吧。这时你脑子一热,这确实挺简单的,最多一天,明天提测!!然而现实是,一天过去了,你的接口还在报签名错误,你的加解密还不能成功,你一遍又一遍的看着对接文档的加密方法和签名方式,一遍又一遍的怀疑人生。so why?
二、坑s
1、接口交互通常都会用json格式的数据,签名也是先将数据json化再签名,看下面例子 一个是php版 一个是python版,假设签名规则就是md5

PHP


Python
发现问题了吗?MD5值是不一样的,仔细看格式化后的json串,虽然表面看着一样,但是python版的长度要比php的长,这时你可能还没发现问题,在仔细看每个key-value中间的冒号,发现了吧?python的冒号以及逗号,是不是要宽一些,这就是坑所在,同样用语言自带的json格式化函数出来的串,python的key-value的冒号逗号后面会多一个空格,如果不处理拿去签名,签名就不一样了,java也和python一样,所以在和php对接的时候,需要注意这个json坑!
2、数据精度
PHP的7.1.*版本,json_encode()函数会对浮点数精度影响。

浙公网安备 33010602011771号