收藏
回答

mp_sig签名一直提示错误

问题模块 框架类型 问题类型 操作时间 AppID
管理后台 小游戏 Bug 2018-06-29 wxe0e6a8746dd227ed
private static String getSign(Map<String,String> nutMap, String urlData, String session_key) {
Set<String> set1 = nutMap.keySet();
       String[] arrayToSort1 = set1.toArray(new String[set1.size()]);
       Arrays.sort(arrayToSort1,String.CASE_INSENSITIVE_ORDER);
       StringBuilder stringBuilder1 = new StringBuilder("");
       for (String str : arrayToSort1) {
if (stringBuilder1.toString().equals("")) {
stringBuilder1.append(str + "=" + nutMap.get(str));
           } else {
stringBuilder1.append("&" + str + "=" + nutMap.get(str));
           }
}
log.info("buy|stringBuilder1=" + stringBuilder1.toString());

       String temp = "";
       try {
stringBuilder1.append(urlData);
//            log.info("buy|stringBuilder1=" + stringBuilder1.toString());
           temp = SnsSigCheck.encodeUrl(stringBuilder1.toString());
           log.info("buy|aaaaaaaaaa=" + stringBuilder1.toString().equals(temp));
       }catch (Exception e){

}

String mp_sig = null;//
       try {
Mac mac = Mac.getInstance("HmacSHA256");
           SecretKeySpec secretKey = new SecretKeySpec(session_key.getBytes("UTF-8"), mac.getAlgorithm());
           mac.init(secretKey);
           byte[] hash = mac.doFinal(temp.getBytes("UTF-8"));
           mp_sig = new String(Base64Coder.encode(hash));
       }catch (Exception e){
Logs.get().error("=========e="+ Lang.getStackTrace(e));
       }
return mp_sig;
   }


最后一次编辑于  2018-06-29  (未经腾讯允许,不得转载)
邀请回答
复制链接收藏投诉关注问题回答

3 个回答

  • 小E
    小E
    2018-06-29

    错误信息都没有啊。

    2018-06-29
    赞同
    回复 2
    • 真如~能
      真如~能
      2018-06-29

      "errcode": 90009,

         "errmsg": "mp_sig error hint: [m7hsEA05873139]"


      2018-06-29
      回复
    • 真如~能
      真如~能
      2018-06-29回复真如~能

      有没有demo来运行一下呀


      2018-06-29
      回复
  • 真如~能
    真如~能
    2018-06-29

    "errcode": 90009,

       "errmsg": "mp_sig error hint: [m7hsEA05873139]"


    2018-06-29
    赞同
    回复 5
    • 小E
      小E
      2018-06-29

      你这url参数拼接结果和顺序是对的么?日志打印看看。

      2018-06-29
      回复
    • 真如~能
      真如~能
      2018-06-29

      appid=wxe0e6a8746dd227ed&offer_id=1450015771&openid=ohDof5VgEagodazWz8adnMa17-7A&pf=android&ts=1530257189&zone_id=1

      2018-06-29
      回复
    • 真如~能
      真如~能
      2018-06-29

      拼接顺序是对的,已经对过了

      2018-06-29
      回复
    • 小E
      小E
      2018-06-29回复真如~能

      access token 过期了?

      2018-06-29
      回复
    • 真如~能
      真如~能
      2018-06-29

      刚刚请求的accessToken,不可能马上就过期呀

      2018-06-29
      回复
  • 娇华
    娇华
    2018-06-29

    你好,可以尝试参考下面这个回答,看看是否有帮助

    小游戏虚拟支付报签名错误
    https://developers.weixin.qq.com/blogdetail?action=get_post_info&docid=00044e0fd584b808ef8658d2156800&highline=90009

    2018-06-29
    赞同
    回复 3
    • 真如~能
      真如~能
      2018-06-29

      问题是排序后的内容也是一样的呀,url中也有accessToken,而body中没有accessToken的内容呀

      LinkedHashMap linkedHashMap = new LinkedHashMap();
      linkedHashMap.put("openid", openid);
      linkedHashMap.put("appid", appid);
      linkedHashMap.put("offer_id", offer_id);
      linkedHashMap.put("ts", ts);
      linkedHashMap.put("zone_id", zone_id);
      linkedHashMap.put("pf", pf);
      linkedHashMap.put("sig", sig);
      linkedHashMap.put("mp_sig", mp_sig);
      log.info("buy|linkedHashMap=" + linkedHashMap);
      String url = "https://api.weixin.qq.com/cgi-bin/midas/sandbox/getbalance?access_token=" + ACCESSTOKEN;
      String jsonObject = Sender.create(Request.create(url, Request.METHOD.POST).setData(Json.toJson(linkedHashMap)))
      .setTimeout(10000).send().getContent("utf-8");


      2018-06-29
      回复
    • 娇华
      娇华
      2018-06-29回复真如~能

      麻烦提供下报错的大致时间点

      2018-06-29
      回复
    • 真如~能
      真如~能
      2018-06-29

      今天16点左右

      2018-06-29
      回复