结果
2018-7-2 15:46:40.391 INFO [main] buy|jsonObject={ "errcode": 90009, "errmsg": "mp_sig error hint: [eDd2eA05993139]"} |
加密方法
private static String getSign(StringBuilder stringBuilder, String session_key) { String mp_sig = null; try { String temp = SnsSigCheck.encodeUrl(stringBuilder.toString()); Mac mac = Mac.getInstance("HmacSHA256"); SecretKeySpec secretKey = new SecretKeySpec(session_key.getBytes(), "HmacSHA256"); mac.init(secretKey); byte[] hash = mac.doFinal(stringBuilder.toString().getBytes()); mp_sig = Base64.encodeBase64String(hash); } catch (Exception e) { Logs.get().error("=========e=" + Lang.getStackTrace(e)); } return mp_sig; } |
sig加密
StringBuilder stringBuilder = new StringBuilder("appid="); stringBuilder.append(appid); stringBuilder.append("&offer_id="); stringBuilder.append(offer_id); stringBuilder.append("&openid="); stringBuilder.append(openid); stringBuilder.append("&pf=android&ts="); stringBuilder.append(ts); stringBuilder.append("&zone_id="); stringBuilder.append(1); stringBuilder.append("&org_loc=/cgi-bin/midas/sandbox/getbalance&method=POST&secret="+secret); String sig = getSign(stringBuilder, secret); |
mp_sig加密
stringBuilder = new StringBuilder(""); stringBuilder.append("access_token="); stringBuilder.append(getAccessToken()); stringBuilder.append("&appid="); stringBuilder.append(appid); stringBuilder.append("&offer_id="); stringBuilder.append(offer_id); stringBuilder.append("&openid="); stringBuilder.append(openid); stringBuilder.append("&pf=android"); stringBuilder.append("&sig="); stringBuilder.append(sig); stringBuilder.append("&ts="); stringBuilder.append(ts); stringBuilder.append("&zone_id="); stringBuilder.append(1); stringBuilder.append("&org_loc=/cgi-bin/midas/sandbox/getbalance&method=POST&session_key="+session_key); |
请求
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=" + Json.toJson(linkedHashMap, JsonFormat.nice())); String url = "https://api.weixin.qq.com/cgi-bin/midas/sandbox/getbalance?access_token=" + ACCESSTOKEN; Request req = Request.create(url, Request.METHOD.POST); req.getHeader().set("Content-Type", "application/octet-stream;charset=UTF-8"); String jsonObject = Sender.create(req.setParams(linkedHashMap).setData(Json.toJson(linkedHashMap,JsonFormat.compact()))) .setTimeout(10000).send().getContent("utf-8"); log.info("buy|jsonObject=" + Json.toJson(Json.fromJson(NutMap.class, jsonObject), JsonFormat.nice())); |

看上去没什么问题,一些细节,比如ts是秒,签名算的值和用例子里的计算值是否相同,sessionKey是否正确之类的
sessionKey你是用的哪个接口获得的值?
String httpCode ="https://api.weixin.qq.com/sns/jscode2session";Response response = Sender.create(Request.create(httpCode, Request.METHOD.GET).setParams(map)).setTimeout(60000).send();String content = response.getContent("utf-8");NutMap nutMap = Json.fromJson(NutMap.class, content);String openId = nutMap.getString("openid");String session_key = nutMap.getString("session_key");我用的sessionKey是这个接口里面获得的值
我这块登录接的H5SDK的,先和H5SDK交互,获取openId和sessionId,在用这个信息去获取的SessionKey
可是根本没人回复呀
你好。不需要重复发帖的,你的反馈我们已经收到,之前也有回复,有结果会在已回复的帖子下跟进哈