跨语言-同样的加密方式,签名逻辑,加解密不通过及签名错误?(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()函数会对浮点数精度影响。

 

posted @ 2020-09-20 10:36  hugeQAQ  阅读(368)  评论(0)    收藏  举报