微信公众号开发系列二:公众号接口配置token验证和工程搭建signature校验

上文中描述了开发公众号所需要的准备工作,本文讲解如何搭建工程,如何实现账号的接口配置。

一、环境说明:

开发工具:Eclipse

JDK版本:JDK1.8

Servlet容器:Tomcat8.5

内网穿透工具:NATAPP

本教程基于Servlet来做请求响应,不使用相关框架,旨在说明微信公众号开发的相关流程。

二、账号接口配置

要进行公众号开发需要登录公众号开启开发模式,配置开发接口。本教程采用测试账号来进行开发,故登录测试账号,配置接口。

首先要配置的就是微信服务请求响应的URL,用来确定本公众号的服务响应来源,另外还要设置一个token字段,此字段内容值可自行定义,当保存配置的时候会把这个token发送到微信平台,然后微信平台会请求此URL调用开发的微信服务,验证服务的可用性和合法性。此URL是使用域名表示的完整路径,如:http://rdzqcm.natappfree.cc/weixinService/weixin。因此,要想配置成功,必然要求我们的服务是开启的,并且有可用的域名可以使用,所以在配置前要先完成下面步骤后进行此项配置。

微信公众号开发系列二:公众号接口配置token验证和工程搭建signature校验_第1张图片

三、基于Token的验证的流程

微信公众号开发系列二:公众号接口配置token验证和工程搭建signature校验_第2张图片

四、构建微信服务工程

1、在Eclipse中新建一个WEB工程,取名:weixinService。

微信公众号开发系列二:公众号接口配置token验证和工程搭建signature校验_第3张图片

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 list = new ArrayList();
		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


  
  	weixinServlet
  	weixinService.servlet.WeixinServlet
  
  
  	weixinServlet
  	/weixin
  
  

4、启动内网映射工具

进入cmd命令窗口,切换到之前NATAPP安装好的目录下,参考NATAPP使用的相关命令,启动NATAPP,命令:natapp -authtoken=“根据申请时分配的值填写”。启动后如图:

微信公众号开发系列二:公众号接口配置token验证和工程搭建signature校验_第4张图片

5、配置接口参数并验证

使用NATAPP启动后生成的域名,结合我们工程的路径,配置接口参数并保存,成功后,页面弹出提示信息。

微信公众号开发系列二:公众号接口配置token验证和工程搭建signature校验_第5张图片

以上我们完成了整个接口参数的配置,在通过验证后,我们就可以调用其开放的响应接口进行进一步开发了。


你可能感兴趣的:(微信公众号开发)