百度了很多,发现很多旧的,要么就是不完整。
首先需要的是腾讯的一些java文件(主要是加解密用),放到自己的包下即可。
然后自己定义个servlet,token和随机数必须和微信平台上的一致。
package com.qj;
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 WechatCallbackApi extends HttpServlet {
private static final long serialVersionUID = 4440739483644821986L;
String sToken = "UunnFe53ufqym";// 这个Token是随机生成,但是必须跟企业号上的相同
String sCorpID = "wx59fec11217";// 这里是你企业号的CorpID
String sEncodingAESKey = "oPnaEVwiYJKgZk2njg6K9kKXTFc";// 这个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 消息的接收、处理、响应
}
}
然后就是配置servlet:
<servlet>
<servlet-name>wechat</servlet-name>
<servlet-class>com.qj.WechatCallbackApi</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>wechat</servlet-name>
<url-pattern>/wechat</url-pattern>
</servlet-mapping>
然后运行(需要外网可访问的ip地址,可以放到第三方,新浪云等)
然后复制URL,验证即可。验证的URL要在域名后加上你servlet的url-pattern. 例: www.xxxx.com/wechat