最近碰到了小程序支付的功能,由于是第一次写这样的功能,看完前后端的开发文档,对于里面的二次签名比较好奇: 服务端返回的数据都没有原始订单里的价格等参数,为什么小程序还要二次签名呢?不可以直接拿来调起支付吗?
以下是我一些不成熟的思考,如有不对,还望指正,感谢!
参数签名的作用
- 请求来源(身份)是否合法
- 防止请求参数被篡改
- 请求的唯一性(不可复制)
结合流程思考
- 由服务端利用加密的参数签名发起统一订单
防止参数被篡改
- 时间戳
请求的唯一性
- 32位随机字符串
辅助校验防止信息被篡改
-
微信支付中心返回的参数由服务端传达给客户端 —— 未加密
-
客户端进行二次签名且 appid 和 api key 均不在数据传输中,即由小程序完成二次加密
防止支付订单被替换
几乎所有加密都不可逆,这应该是对于金融领域的安全性来设计的