#代码逻辑
List list=new ArrayList<>();
list.add(new KeyValue("1",0));
Map kv_list2 = new HashMap<>();
kv_list2.put("kv_list", list);
String jsonKv= JSONObject.toJSONString(kv_list2);
System.out.println("待签名的kv:"+jsonKv+" sessionKey:"+sessionKey);
String signature = new SHA1().getDigestOfString((jsonKv+ sessionKey).getBytes());
System.out.println("kv生成签名:"+signature);
String setUrl = "https://api.weixin.qq.com/wxa/setuserinteractivedata?access_token="+accessToken+"&signature="+signature+"&openid="+openid+"&sig_method=hmac_sha256";
Map setMap = new HashMap<>();
setMap.put("kv_list", jsonKv);
System.out.println("请求地址:"+setUrl);
String out=RestTemplateUtils.post(setUrl,setMap,header,String.class, MediaType.APPLICATION_JSON_UTF8);
System.out.println("微信返回值:"+out);
return out;
#日志打印
待签名的kv:{"kv_list":[{"key":"1","value":0}]} sessionKey:XUqblv2lGZZcAEmMAikEtw==
kv生成签名:A21A3397FE8038C7036B00E635DD1709D3DB2DED
请求地址:https://api.weixin.qq.com/wxa/setuserinteractivedata?access_token=32_8pajMfTb9eyrkyeVJZGoZlYhXCATiufEIT13NEWUAWKoVplszfY_yqMwgc8q-wUBeG0jp9ohSvspXwU_OpuG0qXE-DMs9_R1YrtFSXf3-TyxHz0dPXp-9tIQz0Jru5DKVPhqofvFK7DazaE0UVUdAFAPQP&signature=A21A3397FE8038C7036B00E635DD1709D3DB2DED&openid=ofN9a5DMpYKQMCcMcDpKjiGOL5gE&sig_method=hmac_sha256
微信返回值:{"errcode":87009,"errmsg":"invalid signature hint: [GgiBFl4FE-yvycxa]"}
签名到底是用什么参数做加密?具体加密的内容有哪些?有没有一个可用的例子供参考一下
我也遇到相同的问题,官方有nodejs版本的demo,demo下载地址是:https://developers.weixin.qq.com/minigame/dev/guide/open-ability/interactive-data.html,最下面下载,可以看出demo中使用post json方式请求,我之前是post form请求,也是87009的签名错误,改为post json就成功了。
你不是说了,会将相关代码再原帖中回复,帮助更多的开发者吗?
这里有官方提供的demo
https://developers.weixin.qq.com/minigame/dev/guide/open-ability/signature.html
༺࿈有用࿈༻ 你懂的 :)