玩玩微信公眾號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:加解密密鑰   保存信息,微信會進行驗證,如果調用成功,則順利完成配置(可服務器后台打印調用信息以確認)。   配置好,就可以開始我們的開發工作啦!

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: