上一篇推文中我们讲述了开发公众号所需要的准备工作,本文讲解如何搭建工程,如何实现账号的接口配置。
一、微信公众号开发环境说明:
开发工具:Eclipse
JDK版本:JDK1.8
Servlet容器:Tomcat8.5
内网穿透工具:NATAPP
本教程基于Servlet来做请求响应,不使用相关框架,旨在说明微信公众号开发的相关流程。
二、微信公众号开发账号接口配置
要进行公众号开发需要登录公众号开启开发模式,配置开发接口。本教程采用测试账号来进行开发,故登录测试账号,配置接口。
首先要配置的就是微信服务请求响应的URL,用来确定本公众号的服务响应来源,另外还要设置一个token字段,此字段内容值可自行定义,当保存配置的时候会把这个token发送到微信平台,然后微信平台会请求此URL调用开发的微信服务,验证服务的可用性和合法性。此URL是使用域名表示的完整路径,如:http://rdzqcm.natappfree.cc/weixinService/weixin。因此,要想配置成功,必然要求我们的服务是开启的,并且有可用的域名可以使用,所以在配置前要先完成下面步骤后进行此项配置。
三、微信公众号基于Token的验证的流程
四、构建微信公众号后台服务工程
1、在Eclipse中新建一个WEB工程,取名:weixinService。
2、新建一个Servlet,用来响应微信服务器发来的请求。取名:weixinServlet。
接口配置的时候,微信服务平台会调用我们配置的URL,并且是以get的方式请求的,所以我们在weixinServlet的doGet()方法中实现上述流程的验证配置过程。
先获取请求传来的相关参数,然后根据参数和配置的token使用写好的hash算法得到hashcode,返回同传来的signature的对比结果。
WeixinServlet的源码如下:
public class WeixinServlet extends HttpServlet{
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//获取微信服务器传来的相关参数
String signature = req.getParameter("signature");
String timestamp = req.getParameter("timestamp");
String nonce = req.getParameter("nonce");
String echostr = req.getParameter("echostr");
PrintWriter out = resp.getWriter();
//调用比对signature的方法,实现对token和传入的参数进行hash算法后的结果比对
if(CheckSignatureUtil.checkSignature(signature, timestamp, nonce)){
out.print(echostr);
}
}
}
CheckSignatureUtil的源码如下:
public class CheckSignatureUtil {
//定义微信接口配置的token,同微信账号页面中配置的token值保持一致
public static final String token = "bifengmiaozhuan";
//实现对回传参数的hash,然后同回传参数signature比对
public static boolean checkSignature(String signature,String timestamp,String nonce){
ArrayList<String> list = new ArrayList<String>();
list.add(token);
list.add(timestamp);
list.add(nonce);
//对参数进行升序排列
Collections.sort(list);
StringBuilder content = new StringBuilder();
for(String str:list){
content.append(str);
}
//调用hash算法,对相关参数hash
return signature.equals(HashUtil.hash(content.toString(),"SHA1"));
}
}
HashUtil的源码如下:
public class HashUtil {
//根据指定的hash算法,对传入的内容进行hash
public static String hash(String content, String algorithm) {
if (content.isEmpty()) {
return "";
}
MessageDigest hash = null;
try {
hash = MessageDigest.getInstance(algorithm);
byte[] bytes = hash.digest(content.getBytes("UTF-8"));
String result = "";
for (byte b : bytes) {
String temp = Integer.toHexString(b & 0xff);
if (temp.length() == 1) {
temp = "0" + temp;
}
result += temp;
}
return result;
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return "";
}
}
至此,整个根据token验证微信服务的Servlet程序就开发完毕。
3、配置Servlet
在工程的Web.xml中配置Servlet:
<!-- 配置校验signature的servlet 开始 -->
<servlet>
<servlet-name>weixinServlet</servlet-name>
<servlet-class>weixinService.servlet.WeixinServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>weixinServlet</servlet-name>
<url-pattern>/weixin</url-pattern>
</servlet-mapping>
<!-- 配置校验signature的servlet 结束 -->
4、启动内网映射工具
进入cmd命令窗口,切换到之前NATAPP安装好的目录下,参考NATAPP使用的相关命令,启动NATAPP,命令:natapp -authtoken=“根据申请时分配的值填写”。启动后如图:
5、配置接口参数并验证
使用NATAPP启动后生成的域名,结合我们工程的路径,配置接口参数并保存,成功后,页面弹出提示信息。
以上我们完成了整个接口参数的配置,在通过验证后,我们就可以调用其开放的响应接口进行进一步开发了。