查看微信企业号的官方文档
了解了大概的业务流程,尝试在announcement直接使用,但是一直连接失败,于是决定先写个demo感受一下.网上搜索了一下,找到了许多例子,我参考的是这个: 微信企业号回调模式配置详细讲解,里面说的很详细,有关的重点官方文档也说的很清楚:
java库(2014年9月24日更新,点击下载)
注意事项:
1.com\qq\weixin\mp\aes目录下是用户需要用到的接入企业微信的接口,其中WXBizMsgCrypt.java文件提供的WXBizMsgCrypt类封装了用户接入企业微信的三个接口,其它的类文件用户用于实现加解密,用户无须关心。sample.java文件提供了接口的使用示例。
2.WXBizMsgCrypt封装了VerifyURL, DecryptMsg, EncryptMsg三个接口,分别用于开发者验证回调url、接收消息的解密以及开发者回复消息的加密过程。使用方法可以参考Sample.java文件。
3.请开发者使用jdk1.6或以上的版本。针对org.apache.commons.codec.binary.Base64,需要导入jar包commons-codec-1.9(或comm ons-codec-1.8等其他版本),我们有提供,官方下载地址:
http://commons.apache.org/proper/commons-codec/download_codec.cgi
4.异常java.security.InvalidKeyException:illegal Key Size的解决方案:
在官方网站下载JCE无限制权限策略文件(请到官网下载对应的版本, 例如JDK7的下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html ):
下载后解压,可以看到local_policy.jar和US_export_policy.jar以及readme.txt。如果安装了JRE,将两个jar文件放到%JRE_HOME% \lib\security目录下覆盖原来的文件,如果安装了JDK,将两个jar文件放到%JDK_HOME%\jre\lib\security目录下覆盖原来文件。
新建web项目
- 这里附上我的web.xml以及servlet
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>testWxUrl</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>WxUrl</servlet-name>
<servlet-class>com.ydq.testWechatUrl.WxUrl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>WxUrl</servlet-name>
<url-pattern>/wxurl</url-pattern>
</servlet-mapping>
</web-app>
servlet
@WebServlet("/WxUrl")
public class WxUrl extends HttpServlet {
private static final long serialVersionUID = 1L;
private String token = "你的token";
private String encodingAESKey = "你的key";
private String corpId = "你的企业号id";
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String msg_signature = request.getParameter("msg_signature");
String timestamp = request.getParameter("timestamp");
String nonce = request.getParameter("nonce");
String echostr = request.getParameter("echostr");
System.out.println("request=" + request.getRequestURL());
PrintWriter out = response.getWriter();
String result = null;
try {
WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(token,encodingAESKey,corpId);
result = wxcpt.VerifyURL(msg_signature, timestamp, nonce, echostr);
} catch (AesException e) {
e.printStackTrace();
}
if (result == null) {
result = token;
}
String str = msg_signature+" "+timestamp+" "+nonce+" "+echostr;
System.out.println("Exception:"+result+" "+ request.getRequestURL()+" "+"FourParames:"+str);
out.print(result);
out.close();
out = null;
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
发布到tomcat
- 由于微信验证url需要公网的ip,那么1.使用你自己的服务器 2.映射一个ip
- 为了简单测试,这里我选择的是1.使用的软件ngrok,下载后只需要在exe目录下,shift+右键打开命令行,输入
ngrok http 80
即可 - 如下图,forwarding即是外网可以访问的地址了
企业号回调模式验证
如图填写后,即可成功开启回调模式