最近碰到了小程序支付的功能,由於是第一次寫這樣的功能,看完前後端的開發文檔,對於裏面的二次簽名比較好奇: 服務端返回的數據都沒有原始訂單裏的價格等參數,爲什麼小程序還要二次簽名呢?不可以直接拿來調起支付嗎?
以下是我一些不成熟的思考,如有不對,還望指正,感謝!
參數簽名的作用
- 請求來源(身份)是否合法
- 防止請求參數被篡改
- 請求的唯一性(不可複製)
結合流程思考
- 由服務端利用加密的參數簽名發起統一訂單
防止參數被篡改
- 時間戳
請求的唯一性
- 32位隨機字符串
輔助校驗防止信息被篡改
-
微信支付中心返回的參數由服務端傳達給客戶端 —— 未加密
-
客戶端進行二次簽名且 appid 和 api key 均不在數據傳輸中,即由小程序完成二次加密
防止支付訂單被替換
幾乎所有加密都不可逆,這應該是對於金融領域的安全性來設計的