为SAAS自己平台提供接口方案
验证用户合法流程
采用的是随机salt+SHA-256的加盐哈希
准备工作
-
调用django/utils/crypto.py里的get_random_string方法生成一个16位秘钥key,把这个秘钥、以及生成一个唯一递增的5位数AppId保存在tbl_partner里面。
-
把上面生成的秘钥和AppID微信发给加盟商。
加盟商加密过程:
1. 生成一个8位的盐值salt、一个当前unix时间戳timestamp、一个随机数random_num(0-999之间)
2. 把AppId、timestamp、random_num、key组合成string,并进行utf-8编码
3. 使用salt和上面编码的字符串进行sha256加密,循环加密5次,然后返回salt+加密后字符串
4. 把上面返回的结果进行base64编码。
发送参数:Appid + timestamp + random_num + 加密后key+ 接口所需参数
服务解密过程:
1. 判断timestamp时间,如果时间和现在时间相差大于1小时,返回重新创建。
2. 使用Appid查询db,获取key值,把传过来的值进行上面加密的算法,salt通过传递过来的key值进行base64解码取前8位。
3. 比较算出的值是否和传递过来的值一致,以进行后续的数据组织。
各语言生成盐值salt方法:
DB tbl_partner表新增字段
open_secret "gkdvpmd8o26augs8hs38778lra9fldw1" # 手动生成给saas的key,用于加密
appid 12345 # 唯一字段
接口
查询接口
接口名:/partner_site/orders
Method:POST
请求:
order_id M str 订单号
appid M str saas标识号
timestamp M str unix时间戳,长度是10位
random_num M str 随机数(0-999之间)
key M str 经过加密的值
响应:
code M int 返回码,0表示成功,其他表示错误
msg M string 错误信息
data M string 数据字段为订单表字段;
示例: