打开微信开发文档 开始开发-->接入指南:
--开发文档地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319
分为三个步骤:
- 填写服务器配置
- 验证微信服务器返回的信息
- 接入成功后,实现业务逻辑
大致是在微信公众号后台配置一个服务器的URL地址时,微信服务器会通过这个地址发送四个参数过来,然后在自己的服务器上接收这四个参数并将其排序、加密后得到一个字符串,与微信服务器发来的字符串进行比较,确认该消息来自微信后,把一个随机字符串返回给微信服务器。
一、新建一个Dynamic Web Project工程,引入以下JAR包:
--JAR下载地址,链接: https://pan.baidu.com/s/1DAV9qEKpwvBcbP36hfbGqQ 提取码: q5kj
二、编写一个接入验证的类,代码如下:
package com.wx.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.codec.digest.DigestUtils;
/*
* 访问该类的地址
*
* 也可在web.xml里配置,配置如下:
* <servlet>
<servlet-name>wxServlet</servlet-name>
<servlet-class>com.wx.servlet.WxServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>wxServlet</servlet-name>
<url-pattern>/wxaccess.action</url-pattern>
</servlet-mapping>
*
*访问地址,例如:127.0.0.1:8080/项目名/wxaccess.action
* */
@WebServlet("/wxaccess.action")
public class WxServlet extends HttpServlet {
//与微信公众号后台 - 基本配置 - 修改配置 里的令牌(Token)一致
private static final String TOKEN = "ganzhk";
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//接收微信URL携带的四个参数signature,timestamp,nonce,echostr
String signature = req.getParameter("signature");
String timestamp = req.getParameter("timestamp");
String nonce = req.getParameter("nonce");
String echostr = req.getParameter("echostr");
//将token、timestamp、nonce三个参数进行字典序排序
String[] strArr = new String[]{TOKEN, timestamp, nonce};
Arrays.sort(strArr);
//合并这三个参数
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < strArr.length; i++)
buffer.append(strArr[i]);
//进行sha1加密
String temp = DigestUtils.shaHex(buffer.toString());
PrintWriter writer = resp.getWriter();
//开发者获得加密后的字符串可与signature对比,验证该请求来源于微信
if(temp.equals(signature))
writer.print(echostr);
}
}
将本地映射到外网。我使用的是natapp。natapp每次启动映射地址都会不同,如果需要固定的映射地址,可以使用ngrok。本文就使用natapp进行演示。
--关于NATAPP的教程:https://natapp.cn/article/natapp_newbie
三、注册并开通免费隧道后,在本地双击natapp.exe,输入 natapp –authtoken=后台的authtoken码
四、启动tomcat,并复制http://x6gnjy.natappfree.cc到浏览上。我们访问一下tomcat,看映射到外网是否成功。
五、可以访问,接着进入微信公众号后台(开发—基本配置—修改配置)
六、把这个地址http://x6gnjy.natappfree.cc/wxAccess/wxaccess.action 填写到URL中,Token则与代码里的TOKEN一致。点击提交,会提示接入成功。