逼不得已,只能硬着头皮就着官方的文档一步步的往下做,最终终于实现是回调模式的第一步:URL验证。现将代码共享出来,供各位新手借鉴,同时的后续开发,可以共同交流、学习。
1. 要开启企业号的回调模式,首先要进行URL验证,也就是说,你必须要有一个服务器,来保证在公网环境下能够访问你的这个URL,然后才能接着往下走。(假如没有服务器的话,建议使用BAE比较好)。
2. 创建一个web项目,(注意必须是Dynamic Web Project项目),然后创建一个servlet类,来处理企业号发送的请求,命名任意,代码如下:
package org.yhxz.weixin.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.qq.weixin.mp.aes.AesException; import com.qq.weixin.mp.aes.WXBizMsgCrypt; /** * 核心请求处理类 * * @author heqian * */ public class CoreServlet extends HttpServlet { private static final long serialVersionUID = 4440739483644821986L; String sToken = "5XaQ8cG6x2pULd";//这个Token是随机生成,但是必须跟企业号上的相同 String sCorpID = "wx4edd47d3a6r4r991";//这里是你企业号的CorpID String sEncodingAESKey = "jWmYm7qjusnxu65ZRjGtBxmz3KA1tkAj3ykkR6q2B2C";//这个EncodingAESKey是随机生成,但是必须跟企业号上的相同 /** * 确认请求来自微信服务器 * @throws IOException */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException{ // 微信加密签名 String sVerifyMsgSig = request.getParameter("msg_signature"); // 时间戳 String sVerifyTimeStamp = request.getParameter("timestamp"); // 随机数 String sVerifyNonce = request.getParameter("nonce"); // 随机字符串 String sVerifyEchoStr = request.getParameter("echostr"); String sEchoStr; //需要返回的明文 PrintWriter out = response.getWriter(); WXBizMsgCrypt wxcpt; try { wxcpt = new WXBizMsgCrypt(sToken, sEncodingAESKey, sCorpID); sEchoStr = wxcpt.VerifyURL(sVerifyMsgSig, sVerifyTimeStamp,sVerifyNonce, sVerifyEchoStr); // 验证URL成功,将sEchoStr返回 out.print(sEchoStr); } catch (AesException e1) { e1.printStackTrace(); } } /** * 处理微信服务器发来的消息 */ public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO 消息的接收、处理、响应 } }
3. 接下来就要导入官方的业务类了,然后将其导入到你的项目中。这个可以在官方文档上下载到(注意,虽然官方下载的实例代码中也有验证的代码,但是不建议使用哪个Sample.java,假如不信的可以试试看,反正本人用这个是没通)
下载地址是:
http://qydev.weixin.qq.com/java.zip,
请开发者使用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目录下覆盖原来文件。
5. 下来就是对web.xml文件的配置,代码如下:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <servlet> <servlet-name>coreServlet</servlet-name> <servlet-class> org.yhxz.course.servlet.CoreServlet </servlet-class> </servlet> <!-- url-pattern中配置的/coreServlet用于指定该Servlet的访问路径 --> <servlet-mapping> <servlet-name>coreServlet</servlet-name> <url-pattern>/coreServlet</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list> </web-app>
6. 然后将你的项目发布到服务器上,在浏览器中输入URL,假如在你的Tomcat的控制台上出现NullPointException异常,就说明没有问题(出现的原因是:请求的数据为空,这个你懂得)。
7. 接下来就在企业号后台上的操作了,开启回调模式,输入你的URL,随机生成token和EncodingAESKey,点击提交就可以验证通过,注意一定要代码中的和企业号上的token和EncodingAESKey是要一致的。
8. 通过结果图示:
9. 接下来的还在继续研究,QQ 463066721