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

View File

@ -110,9 +110,8 @@ public class WeixinRequestHandler extends
.addListener(ChannelFutureListener.CLOSE); .addListener(ChannelFutureListener.CLOSE);
return; return;
} }
WeixinMessageTransfer messageTransfer = MessageTransferHandler.parser( WeixinMessageTransfer messageTransfer = MessageTransferHandler
request.getOriginalContent(), aesToken, .parser(request);
request.getEncryptType());
ctx.channel().attr(Consts.MESSAGE_TRANSFER_KEY).set(messageTransfer); ctx.channel().attr(Consts.MESSAGE_TRANSFER_KEY).set(messageTransfer);
messageDispatcher.doDispatch(ctx, request, 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.DefaultHandler;
import org.xml.sax.helpers.XMLReaderFactory; import org.xml.sax.helpers.XMLReaderFactory;
import com.foxinmy.weixin4j.request.WeixinRequest;
import com.foxinmy.weixin4j.socket.WeixinMessageTransfer; import com.foxinmy.weixin4j.socket.WeixinMessageTransfer;
import com.foxinmy.weixin4j.type.AccountType; 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.Consts;
import com.foxinmy.weixin4j.util.StringUtil; import com.foxinmy.weixin4j.util.StringUtil;
@ -83,21 +82,21 @@ public class MessageTransferHandler extends DefaultHandler {
private static MessageTransferHandler global = new MessageTransferHandler(); private static MessageTransferHandler global = new MessageTransferHandler();
public static WeixinMessageTransfer parser(String xmlContent, public static WeixinMessageTransfer parser(WeixinRequest request)
AesToken aesToken, EncryptType encryptType) throws RuntimeException { throws RuntimeException {
try { try {
XMLReader xmlReader = XMLReaderFactory.createXMLReader(); XMLReader xmlReader = XMLReaderFactory.createXMLReader();
xmlReader.setContentHandler(global); xmlReader.setContentHandler(global);
xmlReader.parse(new InputSource(new ByteArrayInputStream(xmlContent xmlReader.parse(new InputSource(new ByteArrayInputStream(request
.getBytes(Consts.UTF_8)))); .getOriginalContent().getBytes(Consts.UTF_8))));
} catch (IOException e) { } catch (IOException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} catch (SAXException e) { } catch (SAXException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
return new WeixinMessageTransfer(aesToken, encryptType, return new WeixinMessageTransfer(request.getAesToken(),
global.toUserName, global.fromUserName, request.getEncryptType(), global.toUserName,
global.getAccountType(), global.msgType, global.eventType, global.fromUserName, global.getAccountType(), global.msgType,
global.nodeNames); global.eventType, global.nodeNames);
} }
} }