修正验证签名参数错误

This commit is contained in:
jinyu
2015-08-08 18:38:40 +08:00
parent c358e366ee
commit f0ecba5f9b
3 changed files with 29 additions and 154 deletions
@@ -56,18 +56,34 @@ public class WeixinRequestHandler extends
protected void channelRead0(ChannelHandlerContext ctx, WeixinRequest request)
throws WeixinException {
final AesToken aesToken = request.getAesToken();
if (aesToken == null) {
if (aesToken == null
|| (StringUtil.isBlank(request.getSignature()) && StringUtil
.isBlank(request.getMsgSignature()))) {
ctx.writeAndFlush(HttpUtil.createHttpResponse(BAD_REQUEST))
.addListener(ChannelFutureListener.CLOSE);
return;
}
/**
* 公众平台:无论Get,Post都带signature参数,当开启aes模式时带msg_signature参数
* 企业号:无论Get,Post都带msg_signature参数
**/
if (request.getMethod().equals(HttpMethod.GET.name())) {
if (MessageUtil.signature(aesToken.getToken(),
request.getTimeStamp(), request.getNonce()).equals(
request.getSignature())) {
if (!StringUtil.isBlank(request.getSignature())
&& MessageUtil.signature(aesToken.getToken(),
request.getTimeStamp(), request.getNonce()).equals(
request.getSignature())) {
ctx.write(new SingleResponse(request.getEchoStr()));
return;
}
if (!StringUtil.isBlank(request.getMsgSignature())
&& MessageUtil.signature(aesToken.getToken(),
request.getTimeStamp(), request.getNonce(),
request.getEchoStr()).equals(
request.getMsgSignature())) {
ctx.write(new SingleResponse(MessageUtil.aesDecrypt(null,
aesToken.getAesKey(), request.getEchoStr())));
return;
}
ctx.writeAndFlush(HttpUtil.createHttpResponse(FORBIDDEN))
.addListener(ChannelFutureListener.CLOSE);
return;
@@ -80,15 +96,14 @@ public class WeixinRequestHandler extends
.addListener(ChannelFutureListener.CLOSE);
return;
}
if (request.getEncryptType() == EncryptType.AES) {
if (!MessageUtil.signature(aesToken.getToken(),
request.getTimeStamp(), request.getNonce(),
request.getEncryptContent()).equals(
request.getMsgSignature())) {
ctx.writeAndFlush(HttpUtil.createHttpResponse(FORBIDDEN))
.addListener(ChannelFutureListener.CLOSE);
return;
}
if (request.getEncryptType() == EncryptType.AES
&& !MessageUtil.signature(aesToken.getToken(),
request.getTimeStamp(), request.getNonce(),
request.getEncryptContent()).equals(
request.getMsgSignature())) {
ctx.writeAndFlush(HttpUtil.createHttpResponse(FORBIDDEN))
.addListener(ChannelFutureListener.CLOSE);
return;
}
} else {
ctx.writeAndFlush(HttpUtil.createHttpResponse(METHOD_NOT_ALLOWED))
@@ -159,7 +159,7 @@ public final class MessageUtil {
throw new WeixinException("-40008", "xml内容不合法:" + e.getMessage());
}
// 校验appId是否一致
if (!fromAppId.trim().equals(appId)) {
if (appId != null && !fromAppId.trim().equals(appId)) {
throw new WeixinException("-40005", "校验AppID失败,expect " + appId
+ ",but actual is " + fromAppId);
}