由于jsonobject默认为hashmap,因此字段顺序并不一定为put时的顺序,当需要用json字符串计算签名时,很容易由于字段顺序不一致导致验签失败。解决方法有:

  1. 直接使用LinkedHashMap
  2. 使用 new JSONObject(true)
  3. JsonObject的定义HashMap改为LinkedHashMap。JSONObject jsonObj =new JSONObject(newLinkedHashMap());

可能还有其他方案,就不一一列举了