签名算法
出于安全考虑,平台中几乎每一次API请求,数据都要进行签名处理。本文介绍在平台中如何进行签名处理。
1.平台所有往来参数,统一以UTF-8编码。
2.通常情况,API的入参都是键值对形式。键和值都是字符串,不区分数据类型,如果值为空,直接留空即可。
一个实例:Token=8ef6a8cc83bb43a6a334bcc89f6ecd1e&OrderID=100012&OrderType=1&OrderDate=2017-7-1&Memo=&Account=100
3.如果参数有复杂类型,那么先将复杂类型编码为字符串(例如JSON),再以键值对形式拼接到参数当中。
4.如果在键名中出现了汉字,需要先对汉字进行url编码。
1.将所有的键值对,从首字母开始,按照ASCII码的顺序进行排序。
例如:Token=8ef6a8cc83bb43a6a334bcc89f6ecd1e&OrderID=100012&OrderType=1&OrderDate=2017-7-1&Memo=&Account=100,
排序的结果是:
Account=100
Memo=
OrderDate=2017-7-1
OrderID=100012
OrderType=1
Token=8ef6a8cc83bb43a6a334bcc89f6ecd1e
2.将排序完的键值对,去掉=后拼接成一个长字符串。
上面的例子拼接完:Account100MemoOrderDate2017-7-1OrderID100012OrderType1Token8ef6a8cc83bb43a6a334bcc89f6ecd1e
3.对拼接完的字符串取MD5值,然后进行Base64编码,编码的结果中=需要替换成-,+需要替换成_
上面的例子MD5并且替换完的结果:rLT0bw2unShYE43avcL_ow--
4.把获取的值用键值Sign提交,最终的提交数据,应该是:
Token=8ef6a8cc83bb43a6a334bcc89f6ecd1e&OrderID=100012&OrderType=1&OrderDate=2017-7-1&Memo=&Account=100&Sign=rLT0bw2unShYE43avcL_ow--