String msgSignature = request.getParameter("msg_signature");
String nonce = request.getParameter("nonce");
String timestamp = request.getParameter("timestamp");
String echostr = request.getParameter("echostr");
response.setContentType("text/html;charset=utf-8");
response.setStatus(HttpServletResponse.SC_OK);
if (StringUtils.isNotBlank(echostr)) {
try {
WXBizMsgCrypt wxcpt = new WXBizMsgCrypt("vqbyk2JG", "bG9IAGJT9XoytBRnbVzR5q7bgub755Fnj7Ny7IBVkzX", "wwc6ab8d2ebbe64348");
String sEchoStr = wxcpt.VerifyURL(msgSignature, nonce,timestamp, echostr);
System.out.println(sEchoStr);
System.out.println("===wwwww================");
response.getWriter().println(sEchoStr);
} catch (Exception e) {
// TODO Auto-generated catch block
System.out.println(e);
}
// 企业号应用在开启回调模式的时候,会传递加密echostr给服务器,企业应该对echostr参数解密并原样返回echostr明文(不能加引号,不能带bom头,不能带换行符),则接入验证生效,回调模式才能开启
System.out.println("====================");
//
return;
}
这是我使用企业微信提供的工具类进行的解密过程 点击下载;
上面的代码,打开一看是没有什么问题, 但是在请求企业微信后,一直提示明文不正确,到时无法进行下一步,昨天晚上一直在网上研究方法, 更换jce策略包、更换配置等等等。 进行到8点钟,一直没进展,企业微信客服也下班了,就回去了。
今天重新研究,从头到尾排查可能性, 最后的最后, 真的是细节成败,希望你们也注意
response.getWriter().println(sEchoStr); 就是这一句导致无法验证???
至于为什么,相信有大神已经看出来了。 就是因为println而不是print 导致了换行符出现无限报错 对不上。
哈哈哈哈