This commit is contained in:
jinyu 2015-08-10 08:39:59 +08:00
parent 9926655fa9
commit cad985ad62
3 changed files with 21 additions and 23 deletions

View File

@ -44,7 +44,7 @@ public class WeixinMessageDecoder extends
@Override
protected void decode(ChannelHandlerContext ctx, FullHttpRequest req,
List<Object> out) throws WeixinException {
String content = req.content().toString(Consts.UTF_8);
String messageContent = req.content().toString(Consts.UTF_8);
QueryStringDecoder queryDecoder = new QueryStringDecoder(req.getUri(),
true);
String methodName = req.getMethod().name();
@ -67,28 +67,28 @@ public class WeixinMessageDecoder extends
String weixinId = parameters.containsKey("weixin_id") ? parameters.get(
"weixin_id").get(0) : null;
AesToken aesToken = aesTokenMap.get(weixinId);
String originalContent = content;
String encryptContent = null;
if (!StringUtil.isBlank(content) && encryptType == EncryptType.AES) {
if (!StringUtil.isBlank(messageContent)
&& encryptType == EncryptType.AES) {
if (StringUtil.isBlank(aesToken.getAesKey())) {
throw new WeixinException(
"AESEncodingKey not be null in AES mode");
}
EncryptMessageHandler encrypt = EncryptMessageHandler
.parser(content);
encryptContent = encrypt.getEncryptContent();
EncryptMessageHandler encryptHandler = EncryptMessageHandler
.parser(messageContent);
encryptContent = encryptHandler.getEncryptContent();
/**
* 企业号第三方套件 _
*/
if (aesToken.getWeixinId().startsWith("tj")) {
aesToken = new AesToken(encrypt.getToUserName(),
aesToken = new AesToken(encryptHandler.getToUserName(),
aesToken.getToken(), aesToken.getAesKey());
}
originalContent = MessageUtil.aesDecrypt(aesToken.getWeixinId(),
messageContent = MessageUtil.aesDecrypt(aesToken.getWeixinId(),
aesToken.getAesKey(), encryptContent);
}
out.add(new WeixinRequest(methodName, encryptType, echoStr, timeStamp,
nonce, signature, msgSignature, originalContent,
encryptContent, aesToken, parameters));
nonce, signature, msgSignature, messageContent, encryptContent,
aesToken, parameters));
}
}

View File

@ -110,9 +110,8 @@ public class WeixinRequestHandler extends
.addListener(ChannelFutureListener.CLOSE);
return;
}
WeixinMessageTransfer messageTransfer = MessageTransferHandler.parser(
request.getOriginalContent(), aesToken,
request.getEncryptType());
WeixinMessageTransfer messageTransfer = MessageTransferHandler
.parser(request);
ctx.channel().attr(Consts.MESSAGE_TRANSFER_KEY).set(messageTransfer);
messageDispatcher.doDispatch(ctx, request, messageTransfer);
}

View File

@ -11,10 +11,9 @@ import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.helpers.XMLReaderFactory;
import com.foxinmy.weixin4j.request.WeixinRequest;
import com.foxinmy.weixin4j.socket.WeixinMessageTransfer;
import com.foxinmy.weixin4j.type.AccountType;
import com.foxinmy.weixin4j.type.EncryptType;
import com.foxinmy.weixin4j.util.AesToken;
import com.foxinmy.weixin4j.util.Consts;
import com.foxinmy.weixin4j.util.StringUtil;
@ -83,21 +82,21 @@ public class MessageTransferHandler extends DefaultHandler {
private static MessageTransferHandler global = new MessageTransferHandler();
public static WeixinMessageTransfer parser(String xmlContent,
AesToken aesToken, EncryptType encryptType) throws RuntimeException {
public static WeixinMessageTransfer parser(WeixinRequest request)
throws RuntimeException {
try {
XMLReader xmlReader = XMLReaderFactory.createXMLReader();
xmlReader.setContentHandler(global);
xmlReader.parse(new InputSource(new ByteArrayInputStream(xmlContent
.getBytes(Consts.UTF_8))));
xmlReader.parse(new InputSource(new ByteArrayInputStream(request
.getOriginalContent().getBytes(Consts.UTF_8))));
} catch (IOException e) {
throw new RuntimeException(e);
} catch (SAXException e) {
throw new RuntimeException(e);
}
return new WeixinMessageTransfer(aesToken, encryptType,
global.toUserName, global.fromUserName,
global.getAccountType(), global.msgType, global.eventType,
global.nodeNames);
return new WeixinMessageTransfer(request.getAesToken(),
request.getEncryptType(), global.toUserName,
global.fromUserName, global.getAccountType(), global.msgType,
global.eventType, global.nodeNames);
}
}