微信公眾號開發筆記-驗證token


開發


話不多說我們直接進入主題

 

我們先去微信公眾號申請一個公眾號:

申請完成之后我們找到開發下的基本配置

然后找到進行基本配置,我們需要一個url地址來驗證,這里的地址必需要是外網,Token是我們任意填寫然后在程序后端填寫一致的token進行驗證

這里的外網地址也就是域名我們一般的同學肯定是沒有的辣,所以我們使用一個叫內網穿透的東東,我們先把網頁停留在這個頁面

 

 

 

 

 

我們利用natapp實現內網穿透(個人推薦natapp 

百度natapp:https://natapp.cn/注冊一個賬號下載natapp ,然后點擊購買隧道有免費的

 

然后我們點擊配置:

 

 綁定域名我們自己任意填寫,地址端口如圖(tomcat端口是多少就是多少,地址為127.0.0.1)

 

 

 接着在我的隧道里面找到隧道復制authtoken。也就是上面我末尾為e283的,你的只有你能看到

通過在DOS窗口運行natapp -authtoken *******(*******代表你在natapp官網他給你的authtoken)指令得到如下圖,啟動tomcat之后此時我們就可以通過tree.natapp1.cc訪問tomcat80端口了

 

 注意:這里我域名為tree.natapp1.cc,小伙伴們需要根據自己設置的域名來訪問

 

 我們啟動tomcat后能通過自己設置的域名(我的為tree.natapp1.cc)訪問到tomcat的8080端口就說明成功了!

好了,我們開始創建項目;

注意:Wechat 本次需要的jar包有servlet-api.jar(因為我自己開發的過程中沒有這個包是后面導入的所以提醒一下)

首先創建weixinServlet文件(在創建時我們可以修改訪問地址如圖)

我們將URL mapping中的內容選中,然后點擊Edit,改成任意自己想訪問的就行了。

通過微信開發文檔我們知道微信后台會通過GET方式發送signature,timestamp,nonce,echostr。

 

 

我們將token,timestamp,nonce進行字典序排序sha1加密后與signature進行對比。

通過則可以進行開發,其中涉及到的sha1加密算法及weixinServlet代碼如下

 這些可以在羅召勇老師的視頻中有詳細的講解,鏈接我放在下面。

 1 package servlet;
 2 
 3 import java.io.IOException;
 4 import java.io.PrintWriter;
 5 
 6 import javax.servlet.ServletException;
 7 import javax.servlet.ServletInputStream;
 8 import javax.servlet.ServletOutputStream;
 9 import javax.servlet.annotation.WebServlet;
10 import javax.servlet.http.HttpServlet;
11 import javax.servlet.http.HttpServletRequest;
12 import javax.servlet.http.HttpServletResponse;
13 import service.WxService;
14 /**
15  * Servlet implementation class weixinServlet
16  */
17 @WebServlet("/wx")
18 public class weixinServlet extends HttpServlet {
19     private static final long serialVersionUID = 1L;
20 
21     /**
22      * Default constructor. 
23      */
24     public weixinServlet() {
25         // TODO Auto-generated constructor stub
26     }
27     /**
28      * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
29      */
30     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
31     
32     String signature=request.getParameter("signature");
33     String timestamp=request.getParameter("timestamp");
34     String nonce=request.getParameter("nonce");
35     String echostr=request.getParameter("echostr");
36     
37     if(WxService.check(timestamp,nonce,signature)) {
38         System.out.println("接入成功");    
39         PrintWriter out=response.getWriter();
40         out.print(echostr);
41         out.flush();
42         out.close();
43     }
44     else {
45         System.out.println("失敗");
46     }
47     }
48 
49     /**
50      * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
51      */
52     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
53     ServletInputStream is=request.getInputStream();
54     byte[] b=new byte[1024];
55     int len;
56     StringBuilder sb=new StringBuilder();
57     while((len=is.read(b))!=-1) {
58         sb.append(new String(b,0,len));
59     }
60     System.out.println(sb.toString());
61     }
62 }

WxService.java如下

package service;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;

public class WxService {
	private static final String TOKEN="bestsegho0914";
   public static boolean check(String timestamp,String nonce,String signature) {

	   String[] strs=new String[] {TOKEN,timestamp,nonce};
	   Arrays.sort(strs);	   
	   String str=strs[0]+strs[1]+strs[2]; 
	   String mysig=sha1(str);
	   System.out.println(mysig);
	   System.out.println(signature);
	   return mysig.equals(signature);   
   }
    
   private static String sha1(String src) {
	   try {
		MessageDigest md=MessageDigest.getInstance("sha1");
	   byte[] digest=md.digest(src.getBytes());
		
	   char[] chars= {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
	  StringBuilder sb=new StringBuilder();
	  for (byte b:digest) {
		sb.append(chars[(b>>4)&15]);
		sb.append(chars[b&15]);
	       }
	   return sb.toString();
	   } catch (NoSuchAlgorithmException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	return null;   
   }
   
}

完成代碼后我們點擊運行 run as ->run on server,在tomcat上啟動

然后回到我們微信公眾號的后台,點擊配置信息的修改按鈕 點擊提交 這里就會顯示配置成功

 

 

 配置成功如圖

 

 

 這時我們就可以開始進行公眾號個人開發了。

本人也是初次進行微信的java開發,分享一些我正在看的資料希望能幫到想要學習微信開發的小伙伴們

羅召勇java開發:https://www.bilibili.com/video/av35042298

微信開發幫助文檔:https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html

微信公眾號測試號申請入口:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

ps:所有文章用於個人學習,僅代表個人理解。

 


免責聲明!

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



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