玩玩微信公眾號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

可參考微信公眾平台的接口文檔 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319
 
到這里,服務的基本配置就完成了,下面我們來進行驗證
 
第二步,配置微信服務器
 

 

URL:你的應用接口公網訪問地址(即上面配置的服務器接口地址)
Token:自己定義的標識
Endcoding AESKey:加解密密鑰
 
保存信息,微信會進行驗證,如果調用成功,則順利完成配置(可服務器后台打印調用信息以確認)。
 
配置好,就可以開始我們的開發工作啦!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM