玩玩微信公众号Java版之一:配置微信公众平台服务器信息

Posted Damon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了玩玩微信公众号Java版之一:配置微信公众平台服务器信息相关的知识,希望对你有一定的参考价值。

在进行微信公众平台开发前,前先做好准备工作,好了以后,我们可以开始啦!
 
第一、准备好服务端接口
 
定义一个http服务接口,主要分为如下几步:
 
1、创建一个servlet类,用来接收请求:
 
 1 package com.wechat;
 2 
 3 import java.io.IOException;
 4 import java.io.PrintWriter;
 5 
 6 import javax.servlet.ServletException;
 7 import javax.servlet.http.HttpServlet;
 8 import javax.servlet.http.HttpServletRequest;
 9 import javax.servlet.http.HttpServletResponse;
10 
11 import org.apache.commons.io.IOUtils;
12 
13 import com.wechat.utility.WeChatUtil;
14 
15 public class WechatConService extends HttpServlet
16 {
17 
18     private static final long serialVersionUID = 1L;
19     /**
20      * 确认请求来自微信服务器
21      */
22     public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
23     {
24 
25         // 微信加密签名
26         String signature = request.getParameter("signature");
27         // 时间戳
28         String timestamp = request.getParameter("timestamp");
29         // 随机数
30         String nonce = request.getParameter("nonce");
31         // 随机字符串
32         String echostr = request.getParameter("echostr");
33 
34         PrintWriter out = response.getWriter();
35 
36         System.out.println(signature);
37         System.out.println(timestamp);
38         System.out.println(nonce);
39         System.out.println(echostr);
40 
41         // 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败
42         if (WeChatUtil.checkSignature(signature, timestamp, nonce))
43         {
44             out.print(echostr);
45         }
46 
47         out.close();
48         out = null;
49     }
50 
51     /**
52      * 处理微信服务器发来的消息
53      */
54     public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
55     {
56         // TODO 消息的接收、处理、响应
57         System.out.println("接口调用了一次");
58 
59         String ret = IOUtils.toString(request.getInputStream(), "utf-8").toString();
60         System.out.println(ret);
61 
62         WeChatMsgBL tWeChatMsgBL = new WeChatMsgBL();
63         String result = tWeChatMsgBL.dealWechatMsg(ret);
64 
65         response.setCharacterEncoding("UTF-8");
66 
67         // 返回文本消息,将处理结果返回
68         PrintWriter out = response.getWriter();
69 
70         System.out.println(result);
71 
72         out.print(result);
73 
74         out.close();
75 
76     }
77 
78 }
View Code

 

2、配置web.xml

 
 1 <!-- 微信公众号测试接口  add by Damon start-->
 2   <servlet>
 3     <servlet-name>WechatconService</servlet-name>
 4     <servlet-class>com.wechat.WechatConService</servlet-class>
 5   </servlet>
 6   
 7   <servlet-mapping>
 8     <servlet-name>WechatconService</servlet-name>
 9     <url-pattern>/Servlet/WechatconService</url-pattern>
10   </servlet-mapping> 
11 
12  <!-- 微信公众号测试接口  add by Damon end-->
View Code

 

 
3、接口配置校验:
在配置微信服务信息时,会进行基础支持的校验,只有校验通过才会配置成功,因此我们首先要实现与微信对接的校验功能。具体参见
 1 /**
 2      * 方法名:checkSignature</br> 详述:验证签名</br> 开发人员:Damon</br> 创建时间:2017-07-11
 3      * </br>
 4      * @param signature
 5      * @param timestamp
 6      * @param nonce
 7      * @return
 8      * @throws
 9      */
10     public static boolean checkSignature(String signature, String timestamp, String nonce)
11     {
12         // 1.将token、timestamp、nonce三个参数进行字典序排序
13         String[] arr = new String[]
14         { token, timestamp, nonce };
15         Arrays.sort(arr);
16 
17         // 2. 将三个参数字符串拼接成一个字符串进行sha1加密
18         StringBuilder content = new StringBuilder();
19         for (int i = 0; i < arr.length; i++)
20         {
21             content.append(arr[i]);
22         }
23         MessageDigest md = null;
24         String tmpStr = null;
25         try
26         {
27             md = MessageDigest.getInstance("SHA-1");
28             // 将三个参数字符串拼接成一个字符串进行sha1加密
29             byte[] digest = md.digest(content.toString().getBytes());
30             tmpStr = byteToStr(digest);
31         }
32         catch (NoSuchAlgorithmException e)
33         {
34             e.printStackTrace();
35         }
36 
37         content = null;
38         // 3.将sha1加密后的字符串可与signature对比,标识该请求来源于微信
39         return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false;
40     }
41 
42     /**
43      * 方法名:byteToStr</br> 详述:将字节数组转换为十六进制字符串</br> 开发人员:Damon </br>
44      * 创建时间:2017-07-11 </br>
45      * @param byteArray
46      * @return
47      * @throws
48      */
49     private static String byteToStr(byte[] byteArray)
50     {
51         String strDigest = "";
52         for (int i = 0; i < byteArray.length; i++)
53         {
54             strDigest += byteToHexStr(byteArray[i]);
55         }
56         return strDigest;
57     }
58 
59     /**
60      * 方法名:byteToHexStr</br> 详述:将字节转换为十六进制字符串</br> 开发人员:Damon</br>
61      * 创建时间:2017-07-11 </br>
62      * @param mByte
63      * @return
64      * @throws
65      */
66     private static String byteToHexStr(byte mByte)
67     {
68         char[] Digit =
69         { \'0\', \'1\', \'2\', \'3\', \'4\', \'5\', \'6\', \'7\', \'8\', \'9\', \'A\', \'B\', \'C\', \'D\', \'E\', \'F\' };
70         char[] tempArr = new char[2];
71         tempArr[0] = Digit[(mByte >>> 4) & 0X0F];
72         tempArr[1] = Digit[mByte & 0X0F];
73         String s = new String(tempArr);
74         return s;
75     }
View Code

 
到这里,服务的基本配置就完成了,下面我们来进行验证
 
第二步,配置微信服务器
 

 

URL:你的应用接口公网访问地址(即上面配置的服务器接口地址)
Token:自己定义的标识
Endcoding AESKey:加解密密钥
 
保存信息,微信会进行验证,如果调用成功,则顺利完成配置(可服务器后台打印调用信息以确认)。
 
配置好,就可以开始我们的开发工作啦!

以上是关于玩玩微信公众号Java版之一:配置微信公众平台服务器信息的主要内容,如果未能解决你的问题,请参考以下文章

玩玩微信公众号Java版之二:接收处理及返回微信消息

如何为微信公众号配置接口?

java微信公众号开发

微信公众平台怎么开发?

微信公众平台里的服务器配置设置是干啥用的

玩玩微信公众号Java版之六:微信网页授权