微信公眾帳號開發教程第4篇-----開發模式啟用及接口配置Java


歡迎加入群:347245650   345531810 進行討論相互交流  我的微信號:572839485

我的微信公眾賬號  我的微社區歡迎關注 索取源碼請點擊

 

圖床:沒有服務器 拖拽圖片 外網即可訪問
http://2.crazyflower.duapp.com/home

微信公眾帳號申請成功后,要想接收處理用戶的請求,就必須要在“高級功能”里進行配置,點擊“高級功能”,將看到如下界面

從上圖中可以看到,高級功能包含兩種模式:編輯模式和開發模式,並且這兩種模式是互斥關系,即兩種模式不能同時開啟。那兩種模式有什么區別呢?

編輯模式:主要針對非編程人員及信息發布類公眾帳號使用。開啟該模式后,可以方便地通過界面配置“自定義菜單”(認證的訂閱號、服務號)和“自動回復的消息”。

開發模式:主要針對具備開發能力的人使用。開啟該模式后,能夠使用微信公眾平台開放的接口,通過編程方式實現自定義菜單的創建、刪除、用戶消息的交互。這種模式更加靈活,建議有接觸過開發的人員用該模式。

編輯模式與開發模式 二者只能開啟一個

1、編輯模式請看:http://www.cnblogs.com/zyw-205520/p/3516495.html

2、開發模式 

  1)PHP開發者接入:http://www.cnblogs.com/zyw-205520/p/3500761.html
 
 2)Java開發者接入如下 詳細的接口文檔說明:微信接口文檔

   創建一個Java Web工程,命名任意, 代碼如下 

 1 package com.javen.course.servlet;
 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 com.javen.course.service.CrazyService;
12 import com.javen.course.util.SignUtil;
13 
14 /**
15  * 核心請求處理類 
16  * @author 簡愛微萌
17  * @Email zyw205@gmail.com
18  * 
19  */
20 public class CrazyServlet extends HttpServlet {
21 
22     private static final long serialVersionUID = -5021188348833856475L;
23     @Override
24     protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
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         PrintWriter out = response.getWriter();  
34         // 通過檢驗signature對請求進行校驗,若校驗成功則原樣返回echostr,表示接入成功,否則接入失敗  
35         if (SignUtil.checkSignature(signature, timestamp, nonce)) {  
36             out.print(echostr);  
37         }  
38         out.close();
39         out = null;
40     }
41     
42     
43     @Override
44     protected void doPost(HttpServletRequest request, HttpServletResponse response)
45             throws ServletException, IOException {
46         // TODO 消息的接收、處理、響應  
47     }
48 }

代碼中只完成了doGet方法,它的作用正是確認請求是否來自於微信服務器;而doPost方法這里驗證不需要我們先放着。

在doGet方法中調用了SignUtil.java 實現代碼如下 1 package com.javen.course.util;

 

 1 package com.javen.course.util;
 2 
 3 import java.security.MessageDigest;
 4 import java.security.NoSuchAlgorithmException;
 5 import java.util.Arrays;
 6 
 7 /**
 8  * 請求校驗工具類
 9  * 
10  * @author 簡愛微萌
11  * @Email zyw205@gmial.com
12  * 
13  */
14 public class SignUtil {
15     // 與接口配置信息中的Token要一致
16     private static String token = "Javen";
17 
18     /**
19      * 驗證簽名
20      * 
21      * @param signature
22      * @param timestamp
23      * @param nonce
24      * @return
25      */
26     public static boolean checkSignature(String signature, String timestamp,
27             String nonce) {
28         String[] arr = new String[] { token, timestamp, nonce };
29         // 將token、timestamp、nonce三個參數進行字典序排序
30         //Arrays.sort(arr);
31         sort(arr);
32         StringBuilder content = new StringBuilder();
33         for (int i = 0; i < arr.length; i++) {
34             content.append(arr[i]);
35         }
36         MessageDigest md = null;
37         String tmpStr = null;
38 
39         try {
40             md = MessageDigest.getInstance("SHA-1");
41             // 將三個參數字符串拼接成一個字符串進行sha1加密
42             byte[] digest = md.digest(content.toString().getBytes());
43             tmpStr = byteToStr(digest);
44         } catch (NoSuchAlgorithmException e) {
45             e.printStackTrace();
46         }
47 
48         content = null;
49         // 將sha1加密后的字符串可與signature對比,標識該請求來源於微信
50         return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false;
51     }
52 
53     /**
54      * 將字節數組轉換為十六進制字符串
55      * 
56      * @param byteArray
57      * @return
58      */
59     private static String byteToStr(byte[] byteArray) {
60         String strDigest = "";
61         for (int i = 0; i < byteArray.length; i++) {
62             strDigest += byteToHexStr(byteArray[i]);
63         }
64         return strDigest;
65     }
66 
67     /**
68      * 將字節轉換為十六進制字符串
69      * 
70      * @param mByte
71      * @return
72      */
73     private static String byteToHexStr(byte mByte) {
74         char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A',
75                 'B', 'C', 'D', 'E', 'F' };
76         char[] tempArr = new char[2];
77         tempArr[0] = Digit[(mByte >>> 4) & 0X0F];
78         tempArr[1] = Digit[mByte & 0X0F];
79 
80         String s = new String(tempArr);
81         return s;
82     }
83 
84     public static void sort(String a[]) {
85         for (int i = 0; i < a.length - 1; i++) {
86             for (int j = i + 1; j < a.length; j++) {
87                 if (a[j].compareTo(a[i]) < 0) {
88                     String temp = a[i];
89                     a[i] = a[j];
90                     a[j] = temp;
91                 }
92             }
93         }
94     }
95 }

 

 

 

注意:SignUtil類中的成員變量token,這里賦予什么值,在接口配置信息中的Token就要填寫什么值,兩邊要保持一致

最后再來看一下CoreServlet是怎么配置的,web.xml中的配置代碼如下:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
 3   <display-name></display-name>
 4   <servlet>
 5     <servlet-name>CrazyServlet</servlet-name>
 6     <servlet-class>  
 7             com.javen.course.servlet.CrazyServlet 
 8         </servlet-class>
 9   </servlet>
15 
16   <servlet-mapping>
17     <servlet-name>CrazyServlet</servlet-name>
18     <url-pattern>/Javen</url-pattern>
19   </servlet-mapping>
20   
24   <welcome-file-list>
25     <welcome-file>index.jsp</welcome-file>
26   </welcome-file-list>
27 </web-app>

 

到目前為止,所有編碼都完成了,就是這么簡單。接下來就是將工程發布到公網服務器上,如果沒有公網服務器環境,可以去了解下BAE、SAE或者租賃一個服務器。發布到服務器上后,我們在瀏覽器里訪http://你服務器的Ip或者域名/Javen(項目名)/Javen,如果看到如下界面就表示我們的代碼沒有問題:

PS:在瀏覽器中直接訪問就相當於提交的是GET請求,而我們什么參數都沒有傳,在驗證的時候當然會報空指針異常。

 

最好在功能>>高級功能>>開發模式中填寫對應的URL和Token即可  沒有找到頁面的可以參考  http://www.cnblogs.com/zyw-205520/p/3500761.html

 

我的微信公眾賬號 人臉識別、天氣查詢、公交查詢、周公解夢、星座運勢、手機歸屬地查詢、聊天嘮嗑等

 

 

 

  

 

 


免責聲明!

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



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