Closed yangqinglei26 closed 7 years ago
是一样的
//首次请求申请验证,返回echostr
if(echostr!=null){
outputStreamWrite(outputStream,echostr);
return;
}
//验证请求签名
if(!signature.equals(SignatureUtil.generateEventMessageSignature(token,timestamp,nonce))){
System.out.println("The request signature is invalid");
return;
}
应该先验证签名确认它是来源于微信的请求,再返回echostr
只有配置完后的第一次请求会有 echostr 参数数据, 不管是微信官方或非法请求,有这个字段都直接返回,并不影响之后请求的签名校验以及安全性。如对安全性要求比较高的话,使用加密配置,参考 ReceiveServlet2 。
哈哈哈,我就用的这个啊,没问题,而且我选的是加密那种,微信后台加密模式选了兼容模式
ReceiveServlet中对验证的顺序与官方文档不符: 1)将token、timestamp、nonce三个参数进行字典序排序 2)将三个参数字符串拼接成一个字符串进行sha1加密 3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信