详细错误:
{"errcode":90009,"errmsg":"mp_sig error hint: [vmRqGa09211508]"}
检查:
1.查看签名顺序是否一致,
2.access_token不允许放在body里,只能放在url上使用?access_token=***来拼接;
3.传的数据不能使用map,需要使用json传参
可以用官网上的数据进行测试:
获取sig:
- 参与米大师签名请求参数
"openid":"odkx20ENSNa2w5y3g_qOkOvBNM1g","appid":"wx1234567","offer_id":"12345678","ts":1507530737,"zone_id":"1","pf":"android"
2.对参与米大师签名的参数按照key=value的格式,并按照参数名ASCII字典序升序排序如下:
stringA="appid=wx1234567&offer_id=12345678&openid=odkx20ENSNa2w5y3g_qOkOvBNM1g&pf=android&ts=1507530737&zone_id=1"
3.拼接uri、method和米大师密钥(此处米大师密钥为微信公众号平台的AppKey,分为沙箱和测试):
在这里官网上的请求地址为 /cgi-bin/midas/getbalance;但是测试环境是 /cgi-bin/midas/sandbox/getbalance(官网并没有写).
stringSignTemp=stringA+"&org_loc=/cgi-bin/midas/sandbox/getbalance&method=POST&secret=zNLgAGgqsEWJOg1nFVaO5r7fAlIQxr1u"
4.把米大师密钥作为key,使用HMAC-SHA256得到签名。
sig=hmac_sha256(key,stringSignTemp)="1ad64e8dcb2ec1dc486b7fdf01f4a15159fc623dc3422470e51cf6870734726b"
获取mg_sig:
mg_sig:大多数是一样的,不同的是,
1.加上了access_token和上面获取的sign,
2.sig是使用AppKey做密钥,而mg_sig是使用session_key作为密钥。
贴出加密算法:
// hmac_sha256private static String hmac_sha256(String message, String secret) {String hash = "";try {Mac sha256_HMAC = Mac.getInstance("HmacSHA256");SecretKeySpec secret_key = new SecretKeySpec(secret.getBytes(), "HmacSHA256");sha256_HMAC.init(secret_key);byte[] bytes = sha256_HMAC.doFinal(message.getBytes());hash = byteArrayToHexString(bytes);System.out.println(hash);} catch (Exception e) {System.out.println("Error HmacSHA256 ===========" + e.getMessage());}return hash;}private static String byteArrayToHexString(byte[] b) {StringBuilder hs = new StringBuilder();String stmp;for (int n = 0; b != null && n < b.length; n++) {stmp = Integer.toHexString(b[n] & 0XFF);if (stmp.length() == 1)hs.append('0');hs.append(stmp);}return hs.toString().toLowerCase();}